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

时间:2011-12-01 17:35:29

标签: c++ g++ fortran linker-errors

所以我在使用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

所以实际上我倒退了。任何人都有任何关于我应该从哪里去的想法?

编辑:所以我想我弄明白了。我跟着this重新安装了libs。现在它神奇地不抱怨fortran main不存在。谢谢你的帮助。

3 个答案:

答案 0 :(得分:5)

您应该更加关注第一条错误消息。链接器告诉你没有符号MAIN__,这就是f2c预期fortran main将在你的C或C ++代码中被编译到的地方。 f2c库本身运行得很好。

原始错误的解决方案是确保在代码中定义了正确的入口点。可能是通过使用C ++进行编译,您有名称错误问题,并且f2c库的正确入口点不存在。

现在通过搞乱f2c库,你完全破坏了你的f2c安装。重新安装并重新开始......

答案 1 :(得分:4)

那么,

sudo rm /usr/lib/libf2c.so && sudo ln -s /usr/lib/libf2c.a /usr/lib/libf2c.so

将删除/usr/lib/libf2c.so,因此您将收到新的错误。

因此,至少您必须重新安装该库并链接到新版本,然后查看您的位置。

答案 2 :(得分:1)

我知道这是一个老线程,但是当我遇到同样的问题时,它对我有帮助。

我通过应用命令解决了它:

sudo rm /usr/lib/libf2c.so& amp ;& amp; sudo ln -s /usr/lib/libf2c.a /usr/lib/libf2c.so

如OP所做的那样。我在这里发现了同样的伎俩:

http://byeworld.blogspot.com/2009/01/libf2cso-undefined-reference-to-main.html

它的作用实际上是删除动态库并为静态库创建别名。它不适用于OP的原因是他/她没有安装静态库。从LOCATE命令的输出中可以清楚地看出这一点。

我希望这有助于其他人。

相关问题