【问题标题】:Linking FORTRAN and C++ objects files链接 FORTRAN 和 C++ 对象文件
【发布时间】:2011-08-31 23:11:24
【问题描述】:

我将从 FORTRAN 调用一个 C++ 函数,为此我使用 ISO_C_Binding 模块。使用命令压缩 FORTRAN 主文件和 C++ 函数后

 gfortran -c mlp8.f90

 g++ -c mean_cpp.cc

这将创建对象文件,但在一些成员建议的链接阶段,我将使用命令

 g++ mlp8.o mean_cpp.o -o main –lgfortran

即使用 C++ 编译器链接到 FORTRAN 库,但它会给出类似

的错误
 /Cygnus/cygwin-b20/H-i586-cygwin32/i586-win32/bin/ld: 
   cannot open –lgfortran: No such a file or directory 

 Collect2:ld return 1 exit status 

所以我认为主要问题是 g++ 链接器无法与 FORTRAN 库链接,所以我可能需要在链接选项中包含一些路径,或者我可能需要在 @987654326 中进行一些设置@编译器,我不知道该怎么做,所以请帮忙解决这个问题。

【问题讨论】:

  • 链接器找不到 gfortran 库(文件名为 libgfortran.a 或 libgfortran.so)。你能检查这个文件是否存在于你的 /lib 目录中吗?另外,我会重新排列命令行以将 .o 文件放在 -o main 后面。
  • 这与今天早些时候提出的stackoverflow.com/questions/7255468/… 几乎是同一个问题。合并它们会更好。

标签: linker g++ fortran gfortran fortran95


【解决方案1】:

你应该找到文件libgfortran.*(例如find / -name "libgfortran.*"locate;或在windows-way Win+g, F3或任何文件管理器中),记录它所在的路径并执行

 g++ mlp8.o mean_cpp.o -o main -LPATH_RECORDED –lgfortran

其中 PATH_RECORDED 是路径。

试试这个 lib 列表(从我的 mingw gfortran 中获得,带有 -v 选项)

 g++ mlp8.o mean_cpp.o -o main -LPATH_RECORDED –lgfortran -lmingw32 -lgcc_s -lgcc -lmoldname  -lmingwex -lmsvcrt

【讨论】:

  • 我使用命令 (g++ main.o print_hi.o -o main -LC:\gfortran\lib –lgfortran) 进行链接,其中 C:\glfortan\lib 是 libgfortran 的路径。一个文件,但它给出了很多错误,例如 c:\gfortran\lib/libgfotran.a(transfer.o)(.text$sprintf+0x1b): transfer.c undefined reference to '_ _mingw_vsprintf' 等等 我应该为了克服这个问题,我还尝试了一些与 gfortran 的链接,地址为 C++ 库,但再次给出了很多错误。我正在使用带有 g++ 和 gfortran 编译器的 windows Vista。提前致谢
  • 非常感谢您的及时回复,非常有帮助。现在的问题是,如果我使用您建议的命令 (g++ main.o print_hi.o -o main -LC:\gfortran\lib -lgfortran -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt) 所以它会给出错误(/Cygnus/cygwin-b20/H-i586-cygwin32/i586-cygwin32/bin/1d:无法打开–lgcc_s:没有这样的文件或目录)所以它找不到这个库文件,它在两个gfortran中都不存在或者在 g++ 文件夹中,我什至搜索了整个计算机但找不到这样的文件。
  • 当我使用不带 -lgcc_s 选项的命令时,它会创建 main.exe 文件,但是当我执行 exe 时,它​​会给出 [main] C:\aaa\main.exe 1000(0) handle_exceptions: Exception: STATUS_STACK OVERFLoW [mian]mian 1000 (0) handle_exception: Dumping stack trace to main.exe.core 并生成文件名main.exe.core
  • 抱歉,我的命令是针对 mingw 编译器的。你的 g++ 是来自 cygwin 还是 mingw?那么 gfortran 呢?
  • 非常感谢您指出这一点,我删除了旧版本的gfortran和g++编译器,我不记得我从哪里下载并安装了MinGW,详细安装过程是在mingw.org/wiki/Getting_Started 给出。我使用命令行界面安装程序。现在工作得很好,我尝试了从 FORTRAN 到 C++ 的调用,反之亦然,即使我尝试了这两个命令作为 gfortran main.o print_hi.o -o main -lstdc++ g++ main.o print_hi.o -o main –lgfortran再次感谢
猜你喜欢
  • 2011-08-05
  • 1970-01-01
  • 2014-01-18
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
相关资源
最近更新 更多