vla*_*don 11 c++ ubuntu clang libstdc++ static-linking
当我使用GCC时,我可以使用以下方法在我的Ubuntu 15.04上构建程序:
-static-libgcc -static-libstdc++
Run Code Online (Sandbox Code Playgroud)
并且编译后的二进制文件可以在"库存"Ubuntu 14.04上运行而无需任何外部软件包,只有标准更新.
是否有可能使用这种静态链接到具有clang的库来构建?
最常见的答案:
ppa:ubuntu-toolchain-r/test)不适合我.
我可以用clang在Ubuntu 14.04.3 LTS上运行吗?
kel*_*tar 14
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)
Run Code Online (Sandbox Code Playgroud)
下面是一个依赖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)
Run Code Online (Sandbox Code Playgroud)
这仍然依赖于libc,但这是一个不同的问题.
clang: warning: argument unused during compilation: '-static-libstdc++'意味着clang忽略了这个标志,因为在当前情况下标志是无用的.首先想到的两个例子是编译C代码(显然不依赖于libstdc ++),或者发出没有链接(-cflag)的只编译命令.由于.o文件无法保存有关静态或动态链接的信息,因此必须在链接阶段指定此标志(并且,为了避免警告,仅在链接阶段).
| 归档时间: |
|
| 查看次数: |
8684 次 |
| 最近记录: |