Я пытаюсь скомпилировать код (не мой), который состоит из смешанных исходных файлов на языке Fortran и C, которые скомпилированы в библиотеку.Эта библиотека может быть либо связана напрямую, либо (более полезно) из класса Python.Ранее я успешно создавал код как 32-битный с g77 и gcc, но я столкнулся с ситуацией, когда код использует большие куски памяти и должен быть 64-битным.
У меня естьпопытался собрать как 64-битную версию, так и как универсальный двоичный файл с gfortran 4.2.3 (двоичный дистрибутив от проекта AT & T R) и системой gcc (4.2).Исходные файлы создаются правильно, но когда я пытаюсь установить связь с библиотекой, я получаю много ошибок «Неопределенные символы» для ряда функций Фортрана.Нм в библиотеке показывает, что символы кажутся существующими, но, очевидно, компоновщик их не находит.
Вот две (из многих) команд компиляции (которые не выдают ошибок):
/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)
и соответствующего нм, который показывает, что символ существует:
niobe:atomic_data/fac[14] nm libfac.a | grep acof
0000000000000000 T _acofz1_
0000000000002548 S _acofz1_.eh
U _acofz1
Я что-то делаю глупо, например, не включаю необходимый переключатель в компоновщик, илиздесь происходит что-то более тонкое?