静态链接python模块时出现问题 我使用SWIG将一些C++封装到Python模块中。我正试图用静态链接库来构建它,这样就可以将它部署到一个使用较旧的glibc/libc++/等的系统中。我可以将libgcc和libstdc++设置为静态链接,但我无法找到一种针对glibc的静态链接方法。谷歌解决方案似乎要么是静态链接整个可执行文件,要么是告诉我不要这样做
无论如何,这里是我的静态链接python模块时出现问题 我使用SWIG将一些C++封装到Python模块中。我正试图用静态链接库来构建它,这样就可以将它部署到一个使用较旧的glibc/libc++/等的系统中。我可以将libgcc和libstdc++设置为静态链接,但我无法找到一种针对glibc的静态链接方法。谷歌解决方案似乎要么是静态链接整个可执行文件,要么是告诉我不要这样做,python,c++,gcc,Python,C++,Gcc,无论如何,这里是我的setup.py cargs = ['-O3','-fPIC','-std=c++11'] largs = ['-lgsl','-lgslcblas','-static-libgcc','-static-libstdc++','-Bstatic -lc'] StopPow_module = Extension('_StopPow', sources=['StopPow_wrap.cxx', '../src/StopPow.cp
setup.py
cargs = ['-O3','-fPIC','-std=c++11']
largs = ['-lgsl','-lgslcblas','-static-libgcc','-static-libstdc++','-Bstatic -lc']
StopPow_module = Extension('_StopPow',
sources=['StopPow_wrap.cxx', '../src/StopPow.cpp', '../src/StopPow_Plasma.cpp', '../src/StopPow_PartialIoniz.cpp','../src/StopPow_SRIM.cpp', '../src/StopPow_BetheBloch.cpp', '../src/StopPow_LP.cpp', '../src/StopPow_AZ.cpp','../src/StopPow_Mehlhorn.cpp','../src/StopPow_Grabowski.cpp','../src/StopPow_Zimmerman.cpp','../src/StopPow_BPS.cpp','../src/AtomicData.cpp','../src/PlotGen.cpp', '../src/Spectrum.cpp'],
extra_compile_args = cargs,
extra_link_args = largs,
language="c++" )
setup (name = 'StopPow',
version = '0.2',
description = """Stopping power library""",
ext_modules = [StopPow_module],
py_modules = ["StopPow","StopPow_Plasma","StopPow_PartialIoniz","StopPow_SRIM","StopPow_BetheBloch","StopPow_LP","StopPow_AZ","StopPow_Mehlhorn","StopPow_Grabowski","StopPow_Zimmerman","StopPow_BPS","AtomicData","PlotGen","Spectrum"],
)
哪一个构建还可以,但仍然需要libc(除其他几个之外):
libgsl是可以的,但是我怎样才能让它与其他的静态链接呢
ldd _StopPow.cpython-33m.so
linux-vdso.so.1 => (0x00007fff309fe000)
libgsl.so.0 => /usr/lib/libgsl.so.0 (0x00007f99e8c0b000)
libgslcblas.so.0 => /usr/lib/libgslcblas.so.0 (0x00007f99e89bf000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f99e86ba000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f99e849d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f99e80d5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f99e941c000)