Я пытаюсь статически связать «библиотеку C++ portaudio» с моим «демо-модулем C++», который является библиотекой (модулем), разрешающей python.Связывание Python/C++, как связать снова статическую библиотеку C++ (portaudio) с distutils?
Я делаю это с Distutils, и для того, чтобы выполнить статические ссылки, я добавил libportaudio к аргументу extra_objects следующим образом:
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
Компиляция с «setup.py сборки питона "приводит к следующей ошибке компоновщика:
/usr/bin/ld: ./clib-3rd-portaudio/libportaudio.a(pa_front.o): перемещение R_X86_64_32 на` .rodata.str1.8 'не может быть используется при создании общего объекта; перекомпилировать с -fpic ./clib-3rd-portaudio/libportaudio.a: Ошибка добавления символов: плохое значение collect2: ошибка: л.д. возвращается 1 выход статус
Так что на данный момент я попробовал очевидное, я ве добавил -fPIC Флэгг к gccArgs (примечание extra_compile_args = gccArgs выше) следующим образом:
gccArgs = [
"-Icsrc",
"-Icsrc/paExamples",
"-Icinc-3rd-portaudio",
"-Icinc-3rd-portaudio/common",
"-Icinc-3rd-portaudio/linux",
"-fPIC"] # << I've added the -fPIC flag here
Однако это приводит к той же самой ошибки, поэтому я предполагаю, что -fPIC флаг не является первопричиной. Я, наверное, пропустил что-то тривиальное, но я немного потерялся здесь, надеюсь, что кто-то может помочь.
Thx! configure -h показывает все доступные параметры, в конечном итоге мне нужно было «настроить CFLAGS = -fPIC» – Gio