Как скомпилировать исходный код cpp в полностью статический двоичный файл, кроме: libc, libpthread, libdl, libstdc ++ и libm

Я хочу скомпилировать бинарный 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

Большое спасибо.

2

Решение

использование -pthread вместо -lpthread,

Источник.

2

Другие решения

Ваша команда ссылки должна выглядеть так:
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 исполняемый файл», чтобы увидеть динамические зависимости.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector