Используйте Модуль, который находится в статически связанном объекте (Фортран) - PullRequest
1 голос
/ 05 января 2012

Уважаемые эксперты stackoverflow,

Я хочу создать (с FORTRAN) общий объектный файл, скажем, myso.so.В этом .so у меня есть один файл модуля, modso.f и один «файл подпрограммы», subso.f.

У меня также есть статически связанный объект (снова в FORTRAN), скажем, mya.aс 3 файлами подпрограмм и 2 файлами модулей, moda1.f и moda2.f.

При связывании myso.so я включаю mya.a и, конечно, modso.o, subso.o,В modso.f и subso.f у меня есть оператор USE для использования модулей moda1.f и moda2.f, которые находятся в mya.a.

В чем моя проблема: Когда я открываюсь (во время выполненияосновной программы) библиотека myso.so (с помощью команды dlopen (myso.so, RTLD_LAZY)), я получаю эту ошибку, возвращающуюся из dlerror (): myso.so: неопределенный символ: moda1_

Другими словами, кажется, что библиотека .so не видит модули в библиотеке .a.На этапе компиляции и компоновки я не получил никаких ошибок / предупреждений.

Я использую компилятор pgi 10 fortran 90 под Ubundu.Приведенный выше пример отлично работает в Windows (где .so - это .dll, а .a - это .lib)

Спасибо заранее.

1 Ответ

1 голос
/ 05 января 2012

Это может быть из-за порядка связывания:

g ++: В каком порядке должны быть связаны статические и динамические библиотеки?

Фаза связывания прошла успешно, потому что символы разрешаются при загрузке динамической библиотеки, а не связываются.

...