我从源代码构建了gcc 4.9.0,并且还计划构建clang 3.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
(full gcc -v output),我的新鲜gcc 4.9.0和我的Ubuntu的股票gcc 4.6.3。
libstdc ++。存在于/ 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参数。
如何恢复系统的健全性并让链接器找到共享库?
答案 0 :(得分:1)
根据您的评论,您使用gcc
而不是g++
进行了汇总
不要把它当作一个错误,因为汇编很好!出现的是链接器错误。实际上,gcc
将告诉ld
链接C标准库而不是C ++标准库。
要解决此问题,请直接转到g++
或通过-lstdc++
。