Cython-Build mit undefiniertem Symbol

Ich habe ein C ++ - Programm, das ich versuche, nach Cython zu konvertieren. Es wird eine bestimmte Bibliothek verwendet, die aus irgendeinem Grund nicht zu einem Arbeitsmodul für den Import führt. Es gibt übrigens ein funktionierendes C ++ - Programm. Hier ist die 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,
)

Ich sollte erwähnen, dass libnmf Probleme zu verursachen scheint. Der erste Build von libnmf würde dazu führen, dass dieses Skript diesen Fehler generiert:

/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

Wenn ich libnmf mit -fPIC neu erstelle, generiert Setup eine libnmfpy.so, aber wenn ich das in ein anderes Skript importiere, erhalte ich das oben genannte undefinierte Symbol:

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

Wenn es helfen würde, ist hier etwas, das meine Suche vorschlug:

nm libnmfpy.so | grep _ZN4elem6lapack3SVDEiiPdiS1_
             U _ZN4elem6lapack3SVDEiiPdiS1_

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

Welches ist, was ich zur Ursache des Fehlers schätze. Ich schaue in die Bibliothek, auf der libnmf aufgebaut ist:

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

Ich bin noch nicht sehr vertraut mit Bibliotheken und Linkern, daher wäre jede Hilfe willkommen. Vielen Dank

edit: ein bisschen graben hat mir was klar gemacht. Gibt es einen Unterschied zwischen Mac OS X und Linux, auf den ich achten sollte? Die Leute, für die ich arbeite, haben ursprünglich keine solchen Build-Fehler gemeldet

Antworten auf die Frage(2)

Ihre Antwort auf die Frage