连接 Fortran 和 C++使用 gcc 的二进制文件

发布于 2024-11-01 06:43:54 字数 1032 浏览 0 评论 0原文

我可以使用 gcc 分别使用 g++ 或 gfortran 在 C 和 C++ 之间或 C 和 Fortran 之间进行调用。但是,如果我尝试在 C++ 和 Fortran 之间进行过程调用,则在使用 g++ 或 gfortran 编译时会出现错误,因为两者都不知道对方所需的库。

如何链接使用 C++ 和 Fortran 编写的源代码的项目?

$ cat print_hi.f90
subroutine print_hi() bind(C)
  implicit none
  write(*,*) "Hello from Fortran."
end subroutine print_hi

$ cat main.cpp
#include <iostream>

extern "C" void print_hi(void);

using namespace std;

int main() {
  print_hi();
  cout << "Hello from C++" << endl;
  return 0;
}
$ gfortran -c print_hi.f90 -o print_hi.o
$ g++ -c main.cpp -o main.o

我尝试与 g++ 链接:

$ g++ main.o print_hi.o -o main
print_hi.o: In function `print_hi':
print_hi.f90:(.text+0x3f): undefined reference to `_gfortran_st_write'

以及有关未定义引用的进一步错误。

对于 gfortran:

$ gfortran main.o print_hi.o -o main
main.o: In function `main':
main.cpp:(.text+0xf): undefined reference to `std::cout'

...等等。

如何将使用 gfortran 和 g++ 库的二进制文件链接在一起?

I can use gcc to make calls between C and C++ or between C and Fortran by using g++ or gfortran, respectively. But if I try to make procedure calls between C++ and Fortran I get errors when compiling with either g++ or gfortran because neither knows about the other's required libraries.

How can I link a project that uses source code written in both C++ and Fortran?

$ cat print_hi.f90
subroutine print_hi() bind(C)
  implicit none
  write(*,*) "Hello from Fortran."
end subroutine print_hi

$ cat main.cpp
#include <iostream>

extern "C" void print_hi(void);

using namespace std;

int main() {
  print_hi();
  cout << "Hello from C++" << endl;
  return 0;
}
$ gfortran -c print_hi.f90 -o print_hi.o
$ g++ -c main.cpp -o main.o

I try linking with g++:

$ g++ main.o print_hi.o -o main
print_hi.o: In function `print_hi':
print_hi.f90:(.text+0x3f): undefined reference to `_gfortran_st_write'

and further errors regarding undefined references.

And with gfortran:

$ gfortran main.o print_hi.o -o main
main.o: In function `main':
main.cpp:(.text+0xf): undefined reference to `std::cout'

...and so forth.

How can I link binaries using the gfortran and g++ libraries together?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

套路撩心 2024-11-08 06:43:54

您正在寻找
g++ main.o print_hi.o -o main -lgfortran 链接到标准 Fortran 库。

您还可以通过传递 -lstdc++ 来使用 gfortran

You're looking for
g++ main.o print_hi.o -o main -lgfortran to link in the standard Fortran libraries.

You can also use gfortran by passing -lstdc++.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文