Подтвердить что ты не робот

Libtool с 32-разрядной версией libstdС++, поэтому на 64-битной целевой платформе, когда установлена ​​несколько версий gcc

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

Вот ситуация:

Я работаю над проектом С++, управляемым с помощью autotools. Целевая платформа RHEL5 64bit с двумя версиями gcc:

  • gcc 4.1.2, установленный в /usr
  • gcc 4.3.5 установлен в /local/opt/gcc -4.3.5

Когда я строю свой проект с версией gcc по умолчанию (4.1.2), все идет хорошо, но когда я переключаюсь на gcc 4.3.5, я получаю эту ошибку во время ссылки:

/local/opt/gcc-4.3.5/lib/../lib/libstdc++.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status

Кажется, что libtool жестко закодировал путь к 32-разрядной версии libstdС++, поэтому в командной строке, в то время как это должна была быть 64-разрядная версия. Точнее, вызов libtool, который терпит неудачу:

/bin/sh ./libtool --tag=CXX --mode=link g++  -m64   -o libfoo.la -rpath /local/opt/foo/lib  src/foo/libfoo_la-bar1.lo src/foo/libfoo_la-bar2.lo

Переводится libtool как:

g++ -shared -nostdlib
/usr/lib/../lib64/crti.o
/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/crtbeginS.o
src/foo/.libs/libfoo_la-bar1.o
src/foo/.libs/libfoo_la-bar2.o
-Wl,--rpath
-Wl,/local/opt/gcc-4.3.5/lib/../lib
-Wl,--rpath
-Wl,/local/opt/gcc-4.3.5/lib/../lib
-L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5
-L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/../../../../lib64
-L/lib/../lib64
-L/usr/lib/../lib64
-L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/../../..
/local/opt/gcc-4.3.5/lib/../lib/libstdc++.so
-lm -lc -lgcc_s
/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/crtendS.o
/usr/lib/../lib64/crtn.o
-m64 -Wl,-soname -Wl,libfoo.so.0 -o .libs/libfoo.so.0.0.0

Я должен уточнить, что метод, который я использую для переключения с gcc gcc по умолчанию gcc 4.3.5, следующий:

$ export PATH=/local/opt/gcc-4.3.5/bin:$PATH
$ export LD_LIBRARY_PATH=/local/opt/gcc-4.3.5/lib:/local/opt/gcc-4.3.5/lib64:$LD_LIBRARY_PATH
$ export GCC_HOME=/local/opt/gcc-4.3.5

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

Приветствия

4b9b3361

Ответ 1

Я только что нашел ответ на свой вопрос: помимо правильной настройки LD_LIBRARY_PATH мне нужно передать аргумент LDFLAGS=-L/local/opt/gcc-4.3.5/lib64 в configure script. Благодарим всех за ваши материалы.