我想staticaly鏈接「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:錯誤:LD返回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!配置-h顯示所有可用的選項,最終我必須做的是'configure CFLAGS = -fPIC' – Gio