2014-01-29 5 views
1

К сожалению, я вынужден использовать gcc-4.1, и я использую debian wheezy. Поскольку gcc-4.1 не находится в репозитории, я пытаюсь построить gcc из источников.Компиляция gcc-4.1

Но я получаю ошибку компиляции:

/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc 
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc 
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crti.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crtn.o' is incompatible with i386 output 

Похоже, что ld выбирает неправильную версию библиотеки, но я проверил мои /usr/lib32 и /usr/lib/x86_64-linux-gnu/ и содержит эти файлы:

/usr/lib32/libc.a 
/usr/lib32/libc.so 
/usr/lib32/crtn.o 
/usr/lib32/crti.o 
/usr/lib/x86_64-linux-gnu/libc.a 
/usr/lib/x86_64-linux-gnu/libc.so 
/usr/lib/x86_64-linux-gnu/crtn.o 
/usr/lib/x86_64-linux-gnu/crti.o 

И ld должен иметь к ним доступ

~$ echo $LIBRARY_PATH 
/usr/lib/x86_64-linux-gnu:/usr/lib32/ 

Так что я понятия не имею, где проблема.

ответ

1

LD_LIBRARY_PATH предназначен только для запущенных программ, уже связанных.

Вы, вероятно, нужно установить LDFLAGS при настройке GCC:

./configure LDFLAGS="-L/usr/lib32" ..... 

Это может быть LDFLAGS_FOR_HOST или LIBS или что-то подобное, хотя.

+0

Спасибо, но './configure LDFLAGS =" - L/usr/lib32 "' не помогло, я попытался исправить makefile вручную, но не смог. Добавление './configure --disable-multilib ...' работало для меня. – tom

+0

Реальная проблема, вероятно, в том, что ваш старый GCC не имеет поддержки «многократного», необходимого для сборки Debian/Ubuntu (многократный не следует путать с multilib). Последнее, что я слышал, даже последний GCC не имел этого готового, но это было недавно. В принципе, Debian/Ubuntu помещает свои файлы в нестандартные места, и компилятор их не может найти. – ams

4

Мне удалось решить эту проблему.

Выполнить настройки с:

./configure --disable-multilib ... 

Но чем я столкнулся с другой проблемой с makeinfo, если у вас есть новая версия >=4.10 чем он не может быть найден Configure. Так просто исправить в сгенерированном Makefile работает для меня:

Измените эту строку:

MAKEINFO = /home/lecopivo/Downloads/gcc412/gcc412/gcc-4.1.2/missing makeinfo 

Для этого:

MAKEINFO = makeinfo 

я нашел this полезным.