Компиляция 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
-2
задан 27 July 2012 в 00:49
3 ответа

Отсутствуют файлы разработки (заголовки, библиотеки) для libffi .

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

0
ответ дан 5 December 2019 в 21:14

У меня все заработало.

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

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

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

0
ответ дан 5 December 2019 в 21:14

Я знаю, что это довольно старый, но я столкнулся с той же проблемой. Исправление, которое у меня было, заключалось в том, что вместо того, чтобы заходить в Makefiles, я вошел и изменил файлы Makefile.in (моя установленная версия autotools была слишком низкой для autoreconf, иначе я бы изменил файлы Makefile.am). Эти модификации были связаны с tarball-файлом 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. в: Я добавил $ (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 возникла из-за другой ошибки, с которой я столкнулся, и меня не беспокоит не имея доступа к страницам руководства, связанным с этим. Я фактически удалил версию, которую я ранее собрал / установил, применил эти модификации и собрал, и она сработала.

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

3
ответ дан 5 December 2019 в 21:14

Теги

Похожие вопросы