Ich versuche, die "C++ portaudio-Bibliothek" gegen mein "C++ Demo-Modul", das eine Python aufrufbare Bibliothek (Modul) ist, zu verknüpfen.Python/C++ - Bindung, wie man die statische C++ - Bibliothek (Portaudio) mit Distutils verbindet?
Ich tue dies mit distutils, und um die statische Verknüpfung auszuführen, habe ich die libportaudio zum extra_objects Argumente hinzugefügt, wie folgt:
module1 = Extension(
"demo",
sources=cppc,
# TODO remove os dependency
extra_compile_args=gccArgs,
# link against shared libraries
#libraries=[""]
# link against static libraries
extra_objects=["./clib-3rd-portaudio/libportaudio.a"]) # << I've added the static lib here
Kompilieren mit „Python setup.py build "Ergebnisse in der folgenden Linkfehler:
/usr/bin/ld: ./clib-3rd-portaudio/libportaudio.a(pa_front.o): Verlagerung R_X86_64_32 gegen` .rodata.str1.8' kann nicht sein, Wird verwendet, wenn ein gemeinsames Objekt erstellt wird; neu kompilieren mit -fPIC ./clib-3rd-portaudio/libportaudio.a: Fehler beim Hinzufügen Symbole: Bad Wert collect2: Fehler: ld returned 1 exit status
Deshalb an dieser Stelle ich das Offensichtliche versucht habe, ich
gccArgs = [
"-Icsrc",
"-Icsrc/paExamples",
"-Icinc-3rd-portaudio",
"-Icinc-3rd-portaudio/common",
"-Icinc-3rd-portaudio/linux",
"-fPIC"] # << I've added the -fPIC flag here
dies führt jedoch in der exakt gleichen Fehler, so dass ich denke, die -fPIC Flag ist nicht die Ursache: die -fPIC flagg zu gccArgs (Anmerkung extra_compile_args = gccArgs oben) wie folgt hinzugefügt haben. Ich vermisse wahrscheinlich etwas Triviales, aber ich bin ein bisschen verloren hier, hoffe, dass jemand helfen kann.
Thx! configure -h zeigt alle verfügbaren Optionen an, schließlich musste ich 'CFLAGS = -fPIC' konfigurieren – Gio