Сборка Cython, приводящая к неопределенному символу

У меня есть программа на C ++, которую я пытаюсь обернуть / преобразовать в Cython. Он использует определенную библиотеку, которая по некоторым причинам не приведет к рабочему модулю для импорта. Кстати, есть работающая программа на С ++. Вот setup.py:

ext_modules = [
Extension(
    name="libnmfpy",
    sources=["interface/nmf_lib.pyx"],
    include_dirs = ["../src/", numpy.get_include()],
    libraries=["nmf","mpi_cxx","mpi","m"],
    library_dirs=["../build/Linux/bin.release","/usr/local/lib/","/usr/lib"],
    language="c++",)
]

setup(
name = 'libnmfpy',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules,
)

Я должен упомянуть, что именно libnmf вызывает проблемы. Первая сборка libnmf заставит этот скрипт сгенерировать эту ошибку:

/usr/bin/ld: ../build/Linux/bin.release/libnmf.a(nmf.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
../build/Linux/bin.release/libnmf.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status

Когда я перестраиваю libnmf с -fPIC, программа установки генерирует libnmfpy.so, но когда я импортирую это в другой скрипт, я получу вышеупомянутый неопределенный символ:

Traceback (most recent call last):
File "test.py", line 1, in <module>
    import libnmfpy
ImportError: $path/cython/libnmfpy.so: undefined symbol: _ZN4elem6lapack3SVDEiiPdiS1_

Если это поможет, вот что мой поиск предложил:

nm libnmfpy.so | grep _ZN4elem6lapack3SVDEiiPdiS1_
             U _ZN4elem6lapack3SVDEiiPdiS1_

nm ../build/Linux/bin.release/libnmf.a | grep _ZN4elem6lapack3SVDEiiPdiS1_
             U _ZN4elem6lapack3SVDEiiPdiS1_

Что я и догадываюсь по причине ошибки. Я смотрю на то, что я считаю ошибочной библиотекой, на которой построен libnmf:

nm $another_path/lib/libelemental.a | grep _ZN4elem6lapack3SVDEiiPdiS1_
0000000000005290 T _ZN4elem6lapack3SVDEiiPdiS1_

Я еще не слишком знаком с библиотеками и компоновщиками, поэтому любая помощь будет принята с благодарностью. Спасибо

редактировать: небольшое копание заставило меня понять кое-что. Есть ли разница между Mac OS X и Linux, которую я должен остерегаться? Люди, на которых я работаю, изначально писали, что ошибок при сборке не было.

Ответы на вопрос(2)

Ваш ответ на вопрос