Я пытаюсь скомпилировать код (не мой), состоящий из смешанных исходных файлов Fortran и C, которые скомпилированы в библиотеку. Эта библиотека может быть связана напрямую или (более полезно) управляться из класса Python. Ранее я успешно создавал 32-разрядный код с помощью g77 и gcc, но столкнулся с ситуацией, когда код использует большие куски памяти и должен быть 64-разрядным.
Я пытался собрать как только 64-битную систему, так и как универсальный двоичный файл с помощью gfortran 4.2.3 (двоичный дистрибутив из проекта AT&T R) и системы gcc (4.2). Исходные файлы создаются правильно, но когда я пытаюсь скомпоновать библиотеку, я получаю много ошибок «Неопределенные символы» для ряда функций Fortran. Метка nm в библиотеке показывает, что символы существуют, но очевидно, что компоновщик их не находит.
Вот две (из многих) команды компиляции (которые не вызывают ошибок):
/usr/local/bin/gfortran -arch ppc -arch i386 -arch x86_64 -fPIC -fno-strength-reduce -fno-common -ff2c -Wall -c lsame.f
gcc -c -I/Users/keriksen/Research/atomic_data/fac -I/Users/keriksen/Research/atomic_data/fac/faclib -O2 -fPIC -fno-strength-reduce -fno-common pmalloc.c
И шаг ссылки, который бомбит:
gcc -o sfac sfac.c stoken.c -I/Users/keriksen/Research/atomic_data/fac -I/Users/keriksen/Research/atomic_data/fac/faclib -O2 -fPIC -fno-strength-reduce -fno-common -L/Users/keriksen/Research/atomic_data/fac -lfac -lm -lgfortran -lgcc
Пример неопределенного символа:
"_acofz1", referenced from:
_HydrogenicDipole in libfac.a(coulomb.o)
_HydrogenicDipole in libfac.a(coulomb.o)
и соответствующий nm, который показывает, что этот символ существует:
niobe:atomic_data/fac[14] nm libfac.a | grep acof
0000000000000000 T _acofz1_
0000000000002548 S _acofz1_.eh
U _acofz1
Я делаю что-то глупое, например, не включаю необходимый переключатель в компоновщик, или здесь происходит что-то более тонкое?
U _acofz1
означает, что_acofz1
не определено. То, что определено, этоT _acofz1_
с другим конечным_
. Совершенно самостоятельно обновите пожалуйста до 10.6.8. И мне жаль, что я не могу вам помочь... есть ли исходный код, который воспроизводит проблему, которую мы можем скомпилировать здесь, чтобы увидеть больше проблем? - person Yuji   schedule 23.08.2011