我希望在Linux上编译Boost作为一个共享库(所以.\b2 install link=shared
),但有一个静态链接到libstdc++和libgcc。
在不对上述命令进行任何修改的情况下,我自然会看到到这两个库的动态链接:
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)
静态链接gcc和stdc++的链接器标志是-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
我做错了什么?很明显我遗漏了一些关于这些特定标志的信息。我该如何正确地使用这些标志呢?
1条答案
按热度按时间h79rfbju1#
您必须提供
-static-libgcc
和-static-libstdc++
标志作为linkflags
首先下载并解压缩Boost源文件,然后转到Boost目录并运行
./bootstrap.sh
,然后修改project-config.json文件,将其添加到using gcc : : : <linkflags>-static-libgcc <linkflags>-static-libstdc++ ;
末尾现在可以使用以下命令
./b2 install link=shared
构建和安装Boost库