我从源代码中构建了gcc 4.9.0,并且还计划构建clang3.4.2,但是在libstdc++方面似乎出了问题,因为clang构建包很快,链接器抱怨来自std的各种未定义的引用。
实际上,我随后尝试编译和链接这个琐碎的程序:
#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(全gcc -v输出),与我的新造币gcc 4.9.0和我的Ubuntu的股票gcc 4.6.3.
libstdc++.so存在于/usr/local/lib64 64中:
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中,并作为-L参数出现在详细的gcc输出中作为collect2的参数。
如何恢复系统的正常运行,并让链接器找到共享库?
发布于 2014-07-03 14:39:16
从您的评论中可以看出,您是用gcc而不是g++编译的。
不要认为它是一个错误,因为编译进行得很好!显示的是链接器错误。实际上,gcc将告诉ld链接到C标准库,而不是C++标准库。
要解决这个问题,要么直接使用g++,要么通过-lstdc++。
https://stackoverflow.com/questions/24555769
复制相似问题