Linux下如何编译静态链接libstdc++和libgcc的Boost动态库?
在Linux下编译Boost共享库并静态链接libstdc++和libgcc的问题
我需要在Linux环境下将Boost编译为共享库(对应命令./b2 install link=shared),但要求生成的Boost共享库静态链接libstdc++和libgcc。
默认编译后,用ldd查看libboost_filesystem.so,可以看到这两个库是动态链接的:
ldd libboost_filesystem.so linux-vdso.so.1 (0x00007ffebd5ef000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f2f8330d000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2f832f2000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2f832cf000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2f830dd000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2f82f8e000) /lib64/ld-linux-x86-64.so.2 (0x00007f2f83521000)
我知道-static-libgcc和-static-libstdc++这两个链接标志可以实现静态链接这两个库,之前在CMake项目中通过添加-DCMAKE_SHARED_LINKER_FLAGS="-static-libgcc -static-libstdc++"配置,效果符合预期。
但在Boost的b2编译脚本中,我尝试了多种方式添加这些标志都没有效果:
第一种尝试:
./b2 install cxxflags="-static-libgcc -static-libstdc++" cflags="-static-libgcc -static-libstdc++" linkflags="-static-libgcc -static-libstdc++"
第二种尝试:
./b2 install gcc/linkflags="-static-libgcc -static-libstdc++" gcc/cxxflags="-static-libgcc -static-libstdc++" gcc/cflags="-static-libgcc -static-libstdc++"
第三种尝试:
./b2 install gcc/linkflags="-static-libgcc -static-libstdc++" gcc/cxxflags="-static-libgcc -static-libstdc++" gcc/cflags="-static-libgcc -static-libstdc++" gcc/link=static
请问我哪里操作错了?我显然对b2中这些标志的使用方式有误解,正确的做法应该是什么?
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

