2

我想将二进制 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

非常感谢。

4

2 回答 2

2

使用-pthread而不是-lpthread.

来源

于 2013-02-26T18:53:50.473 回答
0

您的链接命令应如下所示:
g++ objectFiles $(CFLAGS) -o executable -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 可执行文件”以查看动态依赖项。

于 2013-08-16T00:20:55.617 回答