Fortran 到 C 库的链接器错误 - /usr/lib/libf2c.so:对'MAIN__'的未定义引用

Linker errors with Fortran to C library - /usr/lib/libf2c.so: undefined reference to 'MAIN__'

本文关键字:MAIN 引用 未定义 so lib 链接 错误 Fortran usr libf2c      更新时间:2023-10-16

所以我在使用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命令的输出中可以清楚地看到这一点。

我希望这能帮助其他人。