static-libgcc和static-libstdc ++无法正常工作

时间:2015-07-15 14:44:05

标签: c++ gcc static-libraries

我尝试使用-static -static-libgcc -static-libstdc ++编译项目,以便静态链接库。但是,exec是使用动态链接库编译的。我尝试重新安装gcc和g ++,但它没有帮助。这是我的本地环境故障,因为在其他机器上它是静态链接的。

ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.24, 
BuildID[sha1]=, not stripped

我有Ubuntu 14.10,gcc版本4.8.4

谢谢

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我能找到的最佳解释是:

  

另一方面,您的链接器可能正在拾取动态(* .so)   阻止-static-libstdc ++和-static-libgcc使用的库。   每个调用libgcc和libstdc ++的库都应该静态链接   (当然,如果有可用的静态版本)。   https://stackoverflow.com/a/18263911/399105

进一步挖掘,似乎静态链接glibc(默认使用gcc)may not be a good idea either,还有更好的选择,例如uClibcmusl libc

在两者之间,似乎最近维持了musl,这就是我的选择。我终于能够通过静态建立musl来构建一个完全静态的二进制文件:

./configure --disable-shared --enable-wrapper=gcc && make && sudo make install

然后使用musl静态构建其他软件:

CC="/usr/local/musl/bin/musl-gcc" LDFLAGS="-static" ./configure

如果您想了解更多详情,可以看到我在这里做了什么:https://github.com/bmaupin/openldap-tools-static/blob/master/build.sh