我尝试使用-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
谢谢
答案 0 :(得分:2)
我遇到了同样的问题。我能找到的最佳解释是:
另一方面,您的链接器可能正在拾取动态(* .so) 阻止-static-libstdc ++和-static-libgcc使用的库。 每个调用libgcc和libstdc ++的库都应该静态链接 (当然,如果有可用的静态版本)。 https://stackoverflow.com/a/18263911/399105
进一步挖掘,似乎静态链接glibc(默认使用gcc)may not be a good idea either,还有更好的选择,例如uClibc和musl 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