【问题标题】:Can't find libstdc++?找不到 libstdc++?
【发布时间】:2014-07-03 14:00:09
【问题描述】:

我从源代码构建了 gcc 4.9.0,并且还计划构建 clang 3.4.2,但是关于 libstdc++ 似乎有些问题,因为由于链接器抱怨各种未定义的引用,clang 构建很快就打包好了来自标准。

确实,然后我尝试编译和链接琐碎的程序:

#include <iostream>

int main() {
    std::cout << 42;
}

再次点击链接器错误:

/tmp/ccrptgVW.o:temp.cpp:function main: error: undefined reference to 'std::cout'
/tmp/ccrptgVW.o:temp.cpp:function main: error: undefined reference to 'std::ostream::operator<<(int)'
/tmp/ccrptgVW.o:temp.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'std::ios_base::Init::Init()'
/tmp/ccrptgVW.o:temp.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

(full gcc -v output),包括我新开发的 gcc 4.9.0 和我的 Ubuntu 库存 gcc 4.6.3。

libstdc++.so 存在,在 /usr/local/lib64:

ls /usr/local/lib64/libstd*
  /usr/local/lib64/libstdc++.a
  /usr/local/lib64/libstdc++.so
  /usr/local/lib64/libstdc++.so.6.0.20
  /usr/local/lib64/libstdc++.la
  /usr/local/lib64/libstdc++.so.6
  /usr/local/lib64/libstdc++.so.6.0.20-gdb.py

并且这个目录出现在 LIBRARY_PATH 中,并在详细 gcc 输出中作为 collect2 的 -L 参数出现。

如何恢复系统的健全性并让链接器找到共享库?

【问题讨论】:

  • 你是用gcc还是g++编译的?
  • 是的,gcc。感谢您提出后续问题,这让我意识到我错过了显而易见的事情。好心痛,一直以来,我一直不明白 gcc 基于文件扩展名调用 g++ 和直接调用在默认选项方面有本质区别!

标签: gcc linker libstdc++


【解决方案1】:

从您的评论中可以看出,您使用 gcc 而不是 g++ 编译。
不要把它当作一个错误,因为编译很顺利!显示的是链接器错误。事实上,gcc 会告诉ld 链接到 C 标准库而不是 C++ 标准库。

要解决,要么直接去g++,要么通过-lstdc++

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2011-09-18
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多