我有一个闭源 x86_64 库,我想在 Linux 上从 Python 访问它。
我通常为此使用ctypes。
但是这个库是作为存档 (*.a) 文件提供的。我无法将库重新链接到动态 *.so,因为它是在没有 -fPIC 选项的情况下编译的。ctypes 需要 *.so dll。
除了向这个库的打包者抱怨之外,我还能做些什么来把它变成 *.so 吗?也许以某种方式编写包装函数?
编辑:
在https://stackoverflow.com/a/2657390/4323中尝试答案:
gcc -shared -o closed_lib.so -Wl,--whole-archive -fPIC closed_lib.a -Wl,--no-whole-archive
/usr/bin/ld: closed_lib.a(myFFT.o): relocation R_X86_64_32S against `.bss' can not be used when making a shared object; recompile with -fPIC
closed_lib.a(myFFT.o): error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [closed_lib.so] Error 1