c – 与Fortran到C库的链接器错误 – /usr/lib/libf2c.so:对’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

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

编辑:所以我想我弄清楚了.我按照this重新安装了libs.现在它神奇地不抱怨fortran main不存在.谢谢你的帮助.

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

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

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

转载注明原文:c – 与Fortran到C库的链接器错误 – /usr/lib/libf2c.so:对’MAIN__’的未定义引用 - 代码日志