Gcc在错误的目录下搜索头文件

时间:2013-02-20 12:46:08

标签: c++ c gcc

我安装了两个版本的gcc / g ++:gcc-4.5(从包管理器安装,二进制文件在/ usr / bin下,头文件在/ usr / include下)和gcc-4.4.3(由我自己编译) ,放在/opt/gcc-4.4.3)。

当我将gcc / g ++ 4.4.3作为默认版本时(使用“update-alternatives”使/ usr / bin / gcc和/ usr / bin / g ++指向目录下的相应目录“/ opt / gcc-4.4.3 / bin“)并编译了文件,它总是报告以下错误:

  

/ usr / include / c ++ / 4.5 / bits / basic_string.h:1659:未定义引用   `性病:: basic_string的,   std :: allocator :: _ S_construct_aux_2(unsigned long,char,   std :: allocator const&)'

似乎编译器正在尝试在/usr/include/c++/4.5下找到c ++的头文件,这会导致链接错误。当我将gcc的默认版本更改为gcc-4.5时,错误消失了。

那么如何让编译器在正确的目录“/opt/gcc-4.4.3/include”下搜索头文件?我试图导出CPLUS_INCLUDE_PATH,但似乎无法正常工作。

PS:gcc -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)

2 个答案:

答案 0 :(得分:2)

再次尝试编译gcc 4.4.3,但在配置步骤中使用--with-gxx-include-dir=/opt/gcc-4.4.3/include选项。

答案 1 :(得分: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

相关问题