如何将cpp源代码编译为完整的静态二进制文件,除了:libc、libpthread、libdl、libstdc++和li



我想把一个二进制linux编译成完全静态的,但我总是用这个配置失败:

CFLAGS="--static" CPPFLAGS="-I/home/alan/arm/arm-none-linux-gnueabi/libc/usr/include" LDFLAGS="-L/home/alan/arm/arm-none-linux-gnueabi/libc//usr/lib" LIBS="-lcrypt -ldl -lpthread -lm -lc -lstdc++" CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar CXX=arm-none-linux-gnueabi-g++ ./configure --host=arm-none-linux-gnueabi target=arm-none-linux-gnueabi --prefix=/home/alan/armbin/test --without-pcre --without-zlib --without-bzip2 --without-openssl --disable-ipv6 --enable-static

但我总是收到警告dlopen、gethostbyname等。如果我不共享libc、libm等。我收到的警告大致如下:

warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

非常感谢。

使用-pthread而不是-lpthread

来源。

您的链接命令应该如下所示:
g++对象文件$(CFLAGS(-o可执行文件-Wl,-Bstatic-L/path/to/static/lib1/-ls1-L/path_to/static/lib2-ls2-Wl,-B动态

您只需要显式调用静态库libs1.a、libs2.a。您所引用的共享系统库(libc.so、libpthreads.so、libm.so、libdl.so、libstdc++.so等(应该由链接器隐式找到,并且受-Wl、-Bdynamic的影响。您不必明确地传递它们。试着做一个"ldd可执行文件"以查看动态依赖关系。

相关内容

最新更新