zoukankan      html  css  js  c++  java
  • clang问题记:libc++和libstdc++

        把代码拿到新买的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等。   

        

  • 相关阅读:
    python2 类型转换和数值操作
    python2 实现的LED大数字效果
    Python2 基础语法(三)
    delphi操作ini文件
    [SQL]数据库还原 42000错误
    我的宝宝来了
    [DELPHI] D2009控件的安装
    DELPHI学习过程和函数
    [SQL][转载]SQL优化索引
    [SQL] SQL语句,存储过程执行时间
  • 原文地址:https://www.cnblogs.com/wellbye/p/3039203.html
Copyright © 2011-2022 走看看