Установка glib: установка 32-битной библиотеки Glib на машине x86_64bit (64bit)

Я скачал исходники glib 2.56 отсюда:

https://download.gnome.org/sources/glib/2.56/

И затем я пытаюсь собрать и установить 32-битную библиотеку glib на 64-битной платформе x86_64, используя следующие команды: -

../configure CC='/local/common/pkgs/gcc/v6.3.0p2/bin/gcc -m32' CXX='/local/common/data/gcc/v6.3.0p2/bin/g++ -m32' CFLAGS='-fPIC -O2' CXXFLAGS='-fPIC -O2' LD_LIBRARY_PATH=/local/common/data/gcc/v6.3.0p2/lib LDFLAGS=-m32 --enable-static=yes --prefix=/home/gout/source_glib/32bit_glib/glib-2.56.1/glib_32bit --enable-libmount=no PYTHON=/local/common/data/python/v2.7.6/bin/python --with-pcre=/home/gout/pcre_32bit/pcre-8.20/pcre_install

make
make install

При сборке кода (используя команду make). Я сталкиваюсь со следующей проблемой: -

/local/common/pkgsData/gcc-v6.3.0p2/Linux/RHEL6.0-2013-x86_64/bin/ld: i386:x86-64 architecture of input file `.libs/glib_probes.o' is incompatible with i386 output

Я нашел этот файл «glib_probes». создается с 64-битной архитектурой.

[gout@il-gout glib]$ file .libs/glib_probes.o
.libs/glib_probes.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

Над конкретным файлом создается команда: -

/bin/sh ../libtool --mode=compile --silent --tag=CC dtrace -G -s ../../glib/glib_probes.d -o glib_probes.lo

Правило, при котором мы запускаем вышеуказанную команду из исходного кода glib: -

glib_probes.lo: glib_probes.d
    $(AM_V_GEN) $(LIBTOOL) --mode=compile $(AM_V_lt) --tag=CC $(DTRACE) -G -s $< -o $@

переменная LIBTOOL указывает на скрипт libtool, который был создан после запуска скрипта ./configure. Я упомянул CC= '/local/common/pkgs/gcc/v6.3.0p2/bin/gcc -m32' для настройки сценария, но этот конкретный файл glib_probes.o создается с 64-битной архитектурой. Не уверен, что не так с созданием библиотеки glib.

Я убедился, что все остальные файлы были созданы с 32-битной архитектурой, кроме указанного выше файла... Пожалуйста, помогите мне решить эту проблему. Эта проблема приводит к сбою при создании libglib-2.0.la

  CCLD     libglib-2.0.la
/local/common/data/gcc-v6.3.0p2/Linux/RHEL6.0-2013-x86_64/bin/ld: i386:x86-64 architecture of input file `.libs/glib_probes.o' is incompatible with i386 output

person santosh    schedule 10.11.2019    source источник


Ответы (1)


Сценарий сборки Meson, который использует glib, не передает настройку CC, указанную во время настройки. Инструмент Systemtap dtrace использует CC из среды, поэтому вы можете вызвать make следующим образом:

CC="/local/common/pkgs/gcc/v6.3.0p2/bin/gcc -m32" make

Кроме того, вы можете отключить эти зонды во время настройки, используя --disable-dtrace, если они вам не нужны.

person Florian Weimer    schedule 10.11.2019
comment
Кстати, я использовал --disable-dtrace и смог собрать glib-библиотеку. Не уверен, что моему приложению нужны зонды. После создания библиотеки glib. Когда я пытаюсь использовать эту библиотеку в своем приложении, я сталкиваюсь с неопределенным символом: pthread_key_create. - person santosh; 10.11.2019
comment
Нет, вам нужно будет установить CC во время вызова make. Пробники вряд ли понадобятся, они только для отладки. - person Florian Weimer; 10.11.2019
comment
Флориан, Наши регрессии терпят неудачу с ошибками транса. Не уверен, что это из-за пропущенных сборочных зондов. Я хочу включить зонды при создании build. Настройка переменной среды и запуск make должны работать правильно? То есть setenv CC '/local/common/pkgs/gcc/v6.3.0p2/bin/gcc -m32', затем после 'make' - person santosh; 13.11.2019
comment
setenv звучит как csh, я с этим не знаком. Но это должно работать. Возможно, сгенерированные make-файлы делают что-то забавное. Если ничего не получится, вы можете ввести сценарий-оболочку для gcc и поместить его в файл PATH. - person Florian Weimer; 13.11.2019