Ошибки компоновщика с библиотекой Fortran to C - /usr/lib/libf2c.so: неопределенная ссылка на "MAIN__"

Так что у меня возникли небольшие проблемы с библиотекой Fortran to 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

По крайней мере, так оно и есть. Я использовал Google, который сказал мне, что входя...

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

По сути, я пошел назад. У кого-нибудь есть идеи относительно того, куда я должен идти отсюда?

РЕДАКТИРОВАТЬ: Так что я думаю, что я понял это. Я последовал за этим, чтобы переустановить библиотеки. Теперь он волшебным образом не жалуется на то, что фортрана не существует. Спасибо за помощь ребята.

3 ответа

Решение

Вы должны были обратить более пристальное внимание на первое сообщение об ошибке. Линкер говорит вам, что нет символа MAIN__ можно найти, что и ожидается от f2c, что где-то будет скомпилирован фортран 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/libf2c.so

как ОП сделал. Я нашел такой же трюк здесь:

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

На самом деле он удаляет динамическую библиотеку и создает псевдоним статической библиотеки. Причина, по которой он не работал для OP, заключалась в том, что у него не было статической библиотеки. Это было ясно из вывода команды LOCATE.

Я надеюсь, что это помогает кому-то еще.

Другие вопросы по тегам