【问题标题】:Linking to stdc++ with CMake and GCC 4.1.2使用 CMake 和 GCC 4.1.2 链接到 stdc++
【发布时间】:2011-09-28 17:02:09
【问题描述】:

我正在开发一个库,需要确保它与 4.1.2 一起编译(我知道,它不会给我带来任何乐趣)。因此,我在 Fedora 14 机器上下载、编译并安装了 GCC41。

现在在 CMake 中,我只将以下内容更改为变量 CMAKE_CXX_COMPILER=/opt/gcc41/bin/c++41 CMAKE_C_COMPILER=/opt/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/ 中提取包含,但我看不到它链接到哪个版本的库。

有什么办法可以控制吗?

【问题讨论】:

    标签: cmake linker-errors gcc4


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-17
        • 2019-12-04
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        • 2013-07-20
        • 2021-11-15
        • 2016-04-18
        相关资源
        最近更新 更多