Ошибка построения Glib из-за неопределенной ссылки в libffi - PullRequest
0 голосов
/ 10 февраля 2020

В настоящее время я работаю над сборкой Glib версии 2.45.8 для CentOS 7, работающей на x86-64, для пользовательского дистрибутива, основанного на Linux от Scratch, работающей на x86-64. При подключении к libffi возникла проблема с версией 3.2.1.

path/to/build/directory/bin/ld: warning: libc.so.6, needed by //lib/../libffi.so, not found (try using -rpath or -rpath-link)
path/to/build/directory/lib64/libffi.so: undefined reference to `free@GLIBC_2.2.5'
path/to/build/directory/lib64/libffi.so: undefined reference to `mkostemp@GLIBC_2.7'
(etc ... there are about 15 undefined references total)
path/to/build/directory/lib64/libffi.so: undefined reference to `__getdelim@GLIBC_2.2.5'
path/to/build/directory/lib64/libffi.so: undefined reference to `getenv@GLIBC_2.2.5'

Использование -rpath или -rpath-link не будет работать, поскольку файл lib c .so.6 не существует нигде в файловая система для моей сборки.

Однако у меня есть libc.so и libc.so.0 в path/to/build/directory/lib64/ каталоге, в котором libc.so.6 не может быть найден.

Вот мой ./ настроить и сделать команды.

glib_cv_stack_grows=no \
glib_cv_uscore=no \
ac_cv_func_posix_getpwuid_r=yes \
ac_cv_func_posix_getgrgid_r=yes \
LIBFFI_CFLAGS=-lffi \
LIBFFI_LIBS=-lffi \
ZLIB_CFLAGS=-lz \
ZLIB_LIBS=-lz \
PKG_CONFIG_LIBDIR=$TARG/lib/pkgconfig \
./configure --prefix=/ --host=x86_64-linux --with-libiconv

make -j32 LDFLAGS=-liconv

Как получить правильную библиотеку lib c .so для сборки?

1 Ответ

0 голосов
/ 12 февраля 2020

Есть несколько вещей, которые нужно было сделать, чтобы решить эту проблему. Первое, что я обнаружил, было то, что, если программное обеспечение зависит от lib c .so.6, оно было создано для glib c. Однако наша цепочка инструментов для этой сборки использует взамен uClib c, который не выдает lib c .so.6 при сборке. Решение состояло в том, чтобы написать лиги и библиотеки LIBFFI и ZLIB для связи с libffi и zlib, созданными с помощью uClib c.

glib_cv_stack_grows=no \
glib_cv_uscore=no \
ac_cv_func_posix_getpwuid_r=yes \
ac_cv_func_posix_getgrgid_r=yes \
ZLIB_CFLAGS=-I$TARG/include \
ZLIB_LIBS="-L$TARG/lib -lz" \
LIBFFI_CFLAGS=-I$TARG/include \
LIBFFI_LIBS="$TARG/lib/libffi.a" \
PKG_CONFIG_LIBDIR=$TARG/lib/pkgconfig \
./configure --prefix=/ --host=x86_64-linux --with-libiconv

make -j32 LDFLAGS=-liconv
...