如何在Linux上将Boost编译为带有静态stdc++和gcc链接的动态库?

eagi6jfj  于 2023-03-30  发布在  Linux
关注(0)|答案(1)|浏览(181)

我希望在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

我做错了什么?很明显我遗漏了一些关于这些特定标志的信息。我该如何正确地使用这些标志呢?

h79rfbju

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库

相关问题