其他分享
首页 > 其他分享> > 使用clang的静态链接libstdc

使用clang的静态链接libstdc

作者:互联网

当我使用GCC时,我可以使用以下方法在我的Ubuntu 15.04上构建程序:

-static-libgcc -static-libstdc++

并且编译后的二进制文件可以在“库存”Ubuntu 14.04上运行而无需任何外部软件包,只有标准更新.

是否有可能使用这种静态链接到带有clang的库来构建?

最常见的答案:

>使用测试ubuntu代表(ppa:ubuntu-toolchain -r / test)
>更新服务器
>在目标服务器上重新编译
>不要使用GCC

不适合我.

我可以用clang在Ubuntu 14.04.3 LTS上运行吗?

解决方法:

clang在这个问题上与gcc兼容.基本上对于使用iostream来确保libstdc要求的hello-world程序(实际的lib版本可能因发行版而异):

$clang++ test.cpp
$ldd ./a.out
        linux-vdso.so.1 (0x00007ffec65c0000)
        libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/libstdc++.so.6 (0x00007ff937bb6000)
        libm.so.6 => /lib64/libm.so.6 (0x00007ff9378b6000)
        libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/libgcc_s.so.1 (0x00007ff93769e000)
        libc.so.6 => /lib64/libc.so.6 (0x00007ff9372fe000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ff937f3e000)

这是libstdc和libgcc_s的依赖项.但是如果你添加-static-libgcc -static-libstdc:

$clang++ test.cpp -static-libgcc -static-libstdc++
$ldd ./a.out
        linux-vdso.so.1 (0x00007ffe5d678000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fb8e4516000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fb8e4176000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fb8e4816000)

这仍然依赖于libc,但这是一个不同的问题.

clang:warning:编译期间未使用的参数:’ – static-libstdc’表示clang忽略此标志,因为flag在当前情况下无用.首先想到的两个例子是编译C代码(显然不依赖于libstdc),或者发出不带链接的编译命令(-c标志).由于.o文件无法保存有关静态或动态链接的信息,因此必须在链接阶段指定此标志(并且,为了避免警告,仅在链接阶段).

标签:c,clang,ubuntu,static-linking,libstdc
来源: https://codeday.me/bug/20191005/1857884.html