Компиляция GLib из исходной версии 2-32.4

У меня проблемы с компиляцией Glib. Это мои параметры конфигурации, которые я передал ./configure:

./configure LIBFFI_LIBS=/usr/local/lib/libffi.so.6 LIBFFI_CFLAGS=-I/usr/local/lib/libffi-3.0.11/include LIBFFI_CFLAGS=-L/usr/local/lib ZLIB_LIBS=/usr/local/lib/ ZLIB_CFLAGS=/usr/local/include/ CC=/usr/bin/gcc

и это ошибка, которую я получаю при запуске команды make

make[4]: Entering directory `/home/joe/Downloads/glib-2.32.4/gobject'
CCLD   gobject-query
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_pointer'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_float'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_void'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_sint64'
./.libs/libgobject-2.0.so: undefined reference to `ffi_prep_cif'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_uint32'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_double'
./.libs/libgobject-2.0.so: undefined reference to `ffi_call'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_sint32'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_uint64'
collect2: ld returned 1 exit status
make[4]: *** [gobject-query] Error 1
make[4]: Leaving directory `/home/joe/Downloads/glib-2.32.4/gobject'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/joe/Downloads/glib-2.32.4/gobject'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/joe/Downloads/glib-2.32.4/gobject'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/joe/Downloads/glib-2.32.4'
make: *** [all] Error 2

3 ответа

Я знаю, что это довольно старый, но я столкнулся с той же проблемой. Исправление, которое у меня было, заключалось в том, что вместо того, чтобы идти в Makefiles, я пошел и изменил файлы Makefile.in (моя установленная версия autotools была слишком низкой для autoreconf, иначе я бы изменил файлы Makefile.am). Эти модификации были связаны с тарболом glib-2.34.1. В любом случае, модификации были следующими:

gobject / Makefile.in: строка 629

progs_LDADD = ./libgobject-2.0.la $(libglib) $(LIBFFI_LIBS)

gobject / tests / Makefile.in: строка 461

LDADD = ../libgobject-2.0.la $(top_builddir)/gthread/libgthread-2.0.la $(top_builddir)/glib/libglib-2.0.la $(LIBFFI_LIBS)

gio / Makefile.in: я добавил $(LIBFFI_LIBS) в конец многих определений *_LDADD (некоторые из которых, вероятно, были ненужными), которые были в следующих строках: 1292, 1305 (до обратной косой черты), 1319, 1327, 1340

gio / tests / Makefile.in: строка 1073 (часть многострочного назначения)

     $(top_builddir)/gio/libgio-2.0.la $(LIBFFI_LIBS)

построен с помощью команды:

./configure --prefix=$APP/glib/2.34.1 --enable-man=no LIBFFI_CFLAGS=-I$APP/libffi/3.0.11/lib/libffi-3.0.11/include LIBFFI_LIBS=$APP/libffi/3.0.11/lib/libffi.la && make && make install

Параметр --enable-man=no произошел из-за другой ошибки, с которой я столкнулся, и меня не беспокоит отсутствие доступа к справочным страницам, связанным с этим. Я фактически удалил версию, которую я ранее собрал / установил, применил эти модификации и собрал, и это работало.

В любом случае, я думаю, что эти изменения, вероятно, потребуют меньше времени, чем изменение соответствующих строк в Make-файлах (особенно в gio/tests/Makefile). Это может также обеспечить место для начала с точки зрения изменения файлов Makefile.am для autoconf.

Я получил это работает.

Потребовалось взломать каждый отдельный Makefile в исходных каталогах glib и добавить абсолютный путь, указывающий на libffi.la. Я должен был сделать это для каждой строки GCC, которая произвела эту ошибку. Было много.

Я бы запустил make V=1 J=1, чтобы найти следующую строку, которая нуждалась в функциях libffi, и затем исправить это. Кажется, что тот, кто написал сценарии конфигурации makefiles / automake, пропустил эту часть...

Это было ужасно, и я не знаю, как отследить это, чтобы исправить это элегантно, но это сработало менее чем за час.

Вам не хватает файлов для разработки (заголовков, библиотек) для libffi.

Чтобы установить их, установите libffi-devel (Тип RedHat) или libffi-dev (Тип Debian).

Другие вопросы по тегам