2013-02-20 3 views
2

У меня есть две версии gcc/g ++: gcc-4.5 (установленный из диспетчера пакетов, двоичные файлы находятся в/usr/bin, файлы заголовков находятся под/usr/include) и gcc-4.4.3 (скомпилирован сам, помещен в /opt/gcc-4.4.3).Gcc ищет файлы заголовков под неправильным каталогом

Когда я сделал gcc/g ++ 4.4.3 версией по умолчанию (используя «альтернативы обновлений», чтобы make/usr/bin/gcc и/usr/bin/g ++ указывали на соответствующий в каталоге »/ opt /gcc-4.4.3/bin ") и собрали файлы, всегда сообщается следующие ошибки:

/usr/include/c++/4.5/bits/basic_string.h:1659: неопределенная ссылка на` станд :: basic_string, станд :: распределитель :: _ S_construct_aux_2 (без знака долго, голец, станд :: распределитель Const &)»

Кажется, что компилятор пытается найти файлы заголовков для C++ в /usr/include/c++/4.5, что вызывает ошибку ссылки. Когда я изменил версию gcc по умолчанию gcc-4.5, ошибки исчезли.

Так как я могу заставить компилятор искать файлы заголовков под правильным каталогом «/opt/gcc-4.4.3/include»? Я попытался экспортировать CPLUS_INCLUDE_PATH, но, похоже, не работает.

PS: НКУ -v

Using build-in specs 
Target: x86_64-suse-linux 
Configured with: ./configure --prefix=/opt/gcc-4.4.3 
Thread model: posix 
gcc version 4.4.3 (GCC) 
+1

Вы пытались добавить '-I/full/path/to/the/header' при попытке скомпилировать с помощью' 4.4.3'? –

+0

@meh Я пытаюсь изменить путь поиска по умолчанию g ++ из/usr/include в /opt/gcc-4.4.5/include, поэтому -I/full/path/to/the/header не может решить мою проблема. –

+0

Да, я так и думал, но я не был уверен. Не могу помочь, извините. –

ответ

2

Попробуйте скомпилировать GCC 4.4.3 снова, но использовать --with-gxx-include-dir=/opt/gcc-4.4.3/include вариант на этапе конфигурирования.

+0

Да, я пытался это сделать с помощью 'g ++ -v'. –

+0

Спасибо, я попробую. –

+0

@MatsPetersson мой плохой, я буду смотреть мой SO этикет в следующий раз – congusbongus

1

Возможно, это проблема с тем, что сделал update-alternatives, или не сделано.

Когда я построить альтернативный компилятор, я предпочитаю использовать --prefixи--program-suffix=-XY только так я могу определить проблемы. Проверьте, какие cpp бежится:.

/opt/gcc-4.4.3/bin/g++ --print-prog-name=cpp 
cpp -v </dev/null 
/opt/gcc-4.4.3/bin/cpp -v < /dev/null 
/opt/gcc-4.4.3/bin/g++ -print-search-dirs | grep '^programs:' 

(вы также можете проверить ld и as с --print-prog-name)

Установка CPPFLAGS="-v -H "во время сборки может помочь отслеживать вещи вниз слишком

Безобразная обходной путь может CPPFLAGS="-nostdinc -nostdinc++ -I/opt/gcc-4.4.3/include/", но лучше всего исправить вашу среду компиляции, так как это может вызвать как можно больше проблем. Также есть варианты -isystem и -sysroot, чтобы помочь в некоторых случаях, см. http://gcc.gnu.org/onlinedocs/cpp/Invocation.html.