Fortran 到 C 库的链接器错误 - /usr/lib/libf2c.so:对'MAIN__'的未定义引用
Linker errors with Fortran to C library - /usr/lib/libf2c.so: undefined reference to 'MAIN__'
所以我在使用fortran到C库时遇到了一些小麻烦。现在,在我进入这个问题之前,我可以告诉你,我不能像一些论坛网站建议的那样使用g2c。
现在,来谈谈问题。当我试图编译一个非常大的项目时,我得到了以下内容:
[from the makefile...] g++ -L [~200 dirs] -l [~200 libs] -lf2c
/usr/lib/libf2c.so: undefined reference to 'MAIN__'
collect2: ld returned 1 exit status
make: *** [all] Error 1
现在,我已经检查了我的/usr/lib
目录,并得出了以下内容:
$ locate libf2c
/usr/lib/libf2c.so
/usr/lib/libf2c.so.0
/usr/lib/libf2c.so.0.22
所以至少,它就在那里。我用了谷歌,它告诉我输入。。。
sudo rm /usr/lib/libf2c.so && sudo ln -s /usr/lib/libf2c.a /usr/lib/libf2c.so
会有所帮助。库的陈旧意味着gcc不再正确地链接到它,并试图在没有主方法的地方找到一个主方法。所以我做了。然而,在我链接到.a库后,g++现在根本找不到该库。
g++ -L [~200 dirs] -l [~200 libs] -lf2c
/usr/bin/ld: cannot find -lf2c
collect2: ld returned 1 exit status
make: *** [all] Error 1
所以实际上我已经倒退了。有人知道我该何去何从吗?
编辑:所以我想我想通了。我按照这个重新安装了libs。现在它神奇地没有抱怨fortran main不存在。谢谢你们的帮助。
您应该更加注意第一条错误消息。链接器告诉您找不到符号MAIN__
,这就是预期的f2c,fortran main将在您的C或C++代码中编译到的位置。f2c库本身运行良好。
解决最初错误的方法是确保在代码中定义了正确的入口点。使用C++进行编译时,可能会出现名称篡改问题,并且f2c库的正确入口点不存在。
现在,通过摆弄f2c库,您已经完全破坏了f2c的安装。重新安装并重新启动。。。
好吧,
sudo rm /usr/lib/libf2c.so && sudo ln -s /usr/lib/libf2c.a /usr/lib/libf2c.so
将删除/usr/lib/libf2c.so
,因此会出现新的错误。
因此,至少你必须重新安装该库并链接到新版本,然后看看你在哪里。
我知道这是一个旧线程,但当我遇到同样的问题时,它对我很有帮助。
我通过应用命令解决了这个问题:
sudo rm/usr/lib/libf2c.so&;sudo ln-s/usr/lib/libf2c.a/usr/lib/lif2c.so
正如OP所做的那样。我在这里发现了同样的技巧:
http://byeworld.blogspot.com/2009/01/libf2cso-undefined-reference-to-main.html
实际上,它所做的是删除动态库并为静态库创建一个别名。它不适用于OP的原因是他/她没有安装静态库。从LOCATE命令的输出中可以清楚地看到这一点。
我希望这能帮助其他人。
- C++/生成文件错误:未定义对"main"的引用
- 在 Linux 上编译 - 在函数 '_start' 中:(.text+0x20):对 'main' 的未定义引用
- C++错误:在类中取消对main的定义引用
- 无法引用.cpp中的函数,以及 main 中的 .h 文件。C++
- crt1.o:在函数"_start"中:(.text+0x20):对"main"的未定义引用
- 未解析的外部符号__imp_glewInit函数 main 中引用
- main.cpp:(.text+0x8ea):在C++中未定义的引用
- 如何编写一个 void 函数,该函数将在数组中搜索值,并通过引用将该值的位置传递回 main 函数
- main.cpp:(.text+0x8f):对[对象方法]的未定义引用
- Xcode 给出 Mach-O 链接器错误:"_JNI_CreateJavaVM",引用自:main.o 中的_main
- 如何在 main 中使用包含对节点的引用调用函数
- 从 crt1.o 对 main 的未定义引用
- 对"main"的未定义引用 - 但包括 main 函数
- main.cpp :(.text 0x5f):未定义的引用
- 尝试使用 MinGW 编译 Assembly + C++:ccqKAvXJ.o:main.cpp:(.text+0x18):对 'GetMagicNumber' 的未定义引用
- 为什么我的指针在 main 中取消引用后具有不同的值,而不是在我自己的自定义函数中取消引用它时?
- 在Linux上使用makefile,使用Boost和MPI对"main"的未定义引用
- QT Subdir-未定义对main的引用-错误
- C++声明"main"作为对功能的引用?
- 生成文件错误:未定义对 main 的引用