使用CMake和GCC 4.1.2链接到stdc ++

时间:2011-07-05 10:39:56

标签: cmake linker-errors gcc4

我正在开发一个库,需要确保它与4.1.2一起编译(我知道,它给我带来了不愉快)。所以在我下载,编译和安装GCC41的Fedora 14机器上。

现在在CMake中我只将以下内容更改为变量 CMAKE_CXX_COMPILER = /选择/ gcc41 / bin中/ C ++ 41 CMAKE_C_COMPILER = /选择/ gcc41 / bin中/ gcc41

它编译得很好,但似乎使用了错误版本的标准库。我得到的错误如下:

/opt/gcc41/bin/c++41 -Wall -Wold-style-cast -Wsign-compare -Wnon-virtual-dtor -Woverloaded-virtual -Wno-long-long -Wno-old-style-cast -g3 -O2 -ffast-math -mmmx -msse -msse2 -msse3 <OBJECT_FILES> -o <EXE_NAME> -rdynamic -lfreeimage -lcxcore -lcv -lml -lhighgui -lcvaux -llapack -lpthread -ltiff -lSM -lICE -lX11 -lXext -lrt -lz -ldl -ltiff  -lSM -lICE -lX11 -lXext -lrt -lz -ldl -lusb


In function `operator<< <std::char_traits<char> >':
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/ostream:513: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'

显然它从... / include / c ++ / 4.5.1 /中提取了包含,但我看不到它链接到哪个版本的库。

有什么方法可以控制它吗?

2 个答案:

答案 0 :(得分:2)

使用CMake进行配置时,请在第一次配置之前指定编译器。使用环境变量CC和CXX指定C和C ++编译器:

export CC=/opt/gcc41/bin/gcc41
export CXX=/opt/gcc41/bin/c++41
cmake ../source
make

从干净/空的构建树开始,以避免在第一次使用不同的编译器运行CMake时过时的缓存条目。 (你不能在第一次CMake运行后更改编译器而不重新开始......)

答案 1 :(得分:0)

在Fedora中将你的gcc版本设为默认值:

./configure CC=/path/to/gcc/of/your/choice