clang问题记:libc++和libstdc++
2013-04-25 21:13
211 查看
把代码拿到新买的macbook上编译时,出现莫名其妙的链接错误:
Undefined symbols for architecture x86_64:
"CppUnit::SourceLine::SourceLine(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
test_codec::test() in test_codec.o
相信也会有不少朋友碰到这问题,下面我备忘一下查错的过程。
这分代码之前的版本曾经是在mac构建成功的,但记得当时用的是gcc而非xcode默认的clang,也许差别就在其中,因此首先尝试编一份clang的cppunit,即 export CXX=clang; make clean && ./configure && make -j4。发现其自带的测试程序simple就链不过了。联想到gcc和g++的关系,发现果然有个clang++程序,试下把CXX改成clang++再build,通过了,但是把库拿到我的工程里用仍然报引用未定义符号的错误并且还是这些std类。这时想到用ldd检查下其自带的simple程序是通过链接哪些库来解决引用的,在mac下ldd被换成了otool -L,检查simple依赖的结果发现包含libstdc++.so,而在xcode的编译选项中有一个c++ standard library的项,其默认值是libc++,经搜索得知这是一个苹果新写的c++标准库,用来支持最新的c++11标准。于是知道这是两端库不统一的问题,加上export CXXFLAGS=-stdlib=libc++后再执行build,将生成的lib重新拿去使用,构建成功!因此,以前编的依赖库里凡是用到c++的都得重新编译了,如cppunit、freeimage等。
Undefined symbols for architecture x86_64:
"CppUnit::SourceLine::SourceLine(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
test_codec::test() in test_codec.o
相信也会有不少朋友碰到这问题,下面我备忘一下查错的过程。
这分代码之前的版本曾经是在mac构建成功的,但记得当时用的是gcc而非xcode默认的clang,也许差别就在其中,因此首先尝试编一份clang的cppunit,即 export CXX=clang; make clean && ./configure && make -j4。发现其自带的测试程序simple就链不过了。联想到gcc和g++的关系,发现果然有个clang++程序,试下把CXX改成clang++再build,通过了,但是把库拿到我的工程里用仍然报引用未定义符号的错误并且还是这些std类。这时想到用ldd检查下其自带的simple程序是通过链接哪些库来解决引用的,在mac下ldd被换成了otool -L,检查simple依赖的结果发现包含libstdc++.so,而在xcode的编译选项中有一个c++ standard library的项,其默认值是libc++,经搜索得知这是一个苹果新写的c++标准库,用来支持最新的c++11标准。于是知道这是两端库不统一的问题,加上export CXXFLAGS=-stdlib=libc++后再执行build,将生成的lib重新拿去使用,构建成功!因此,以前编的依赖库里凡是用到c++的都得重新编译了,如cppunit、freeimage等。
相关文章推荐
- 什么是lib文件,lib和dll的关系=== c++ try catch 问题
- C++ libxml 中文问题
- 开发C++的lib问题,使用Eclipse
- 解决llvm/clang在windows下编译时找不到头文件和Lib的问题
- 解决Visual C++ for Linux: -L"~/projects/path_to_lib_folder" 无法设置library search path的问题
- 解决64位linux缺少/lib/ld-linux.so.2: libstdc++.so.6的问题
- C++和Fortran混合编程时调用数学函数的问题: error LNK2005: __matherr already defined in LIBCD.lib
- C++调用python时 debug链接错误python_d.lib无法解析的问题
- C/C++/C#问题记录(一)VS2012编译调用dll项目找不到lib的workaround
- eclipse c++ 遇到error while loading .....某某lib的问题
- libc++和libstdc++
- 开发C++的lib问题,使用Eclipse
- C++ VS编译问题--VS下生成DLL,但没有生成Lib的解决办法
- ubuntu下matplotlib画图中文乱码问题
- 【总结】C++ 出现内存问题
- 解决ubuntu 14.04 “E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)”的问题
- C++中模板声明与实现的分离问题
- C/C++刁钻问题各个击破之细说sizeof
- C++技术问题总结map、vector、list、deque各自的使用场合
- c++ 输出string的问题 cout << string