我想将二进制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
非常感谢。
答案 0 :(得分:2)
使用-pthread
代替-lpthread
。
答案 1 :(得分:0)
您的链接命令应如下所示:
g ++ objectFiles $(CFLAGS)-o executable -Wl,-Bstatic -L / path / to / static / lib1 / -ls1 -L / path / to / static / lib2 -ls2 -Wl,-Bdynamic
您只需显式调用静态库libs1.a,libs2.a。您所引用的共享系统库(libc.so,libpthreads.so,libm.so,libdl.so,libstdc ++。等等)应由链接器隐式发现,并受-Wl,-Bdynamic的影响。您不必明确传递它们。尝试做一个 “ldd executable”来查看动态依赖项。