Я хочу скомпилировать бинарный 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 и т. Д. Для shared. Я получаю предупреждение примерно так, как показано ниже:
warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
Большое спасибо.
использование -pthread
вместо -lpthread
,
Ваша команда ссылки должна выглядеть так:
g ++ objectFiles $ (CFLAGS) -o исполняемый файл -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 исполняемый файл», чтобы увидеть динамические зависимости.