当我使用GCC时,可以使用以下命令在Ubuntu 15.04上构建程序:
-static-libgcc -static-libstdc++
编译后的二进制文件可以在“标准” Ubuntu 14.04上运行,而无需任何外部软件包,只需标准更新即可。
用clang静态链接到库是否有可能建立?
最常见的答案:
ppa:ubuntu-toolchain-r/test
)不适合我
我是否可以使用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: argument unused during compilation: '-static-libstdc++'
表示clang忽略了此标志,因为该标志在当前情况下是无用的。我想到的前两个示例是编译C代码(显然不依赖libstdc ++),或发出不链接的纯编译命令(-c
标志)。由于.o
文件无法保存有关静态或动态链接的信息,因此必须在链接阶段指定此标志(并且为避免警告,请仅在链接阶段指定)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句