(clang ++)从libstdc ++。6.0.9.dylib找不到符号

时间:2017-12-23 15:15:13

标签: xcode matlab libstdc++

我在matlab上遇到一个名为“Symbol not found”的错误。错误消息在下面。

Symbol not found: __ZNKSt5ctypeIcE13_M_widen_initEv
Referenced from: blabla/lib/buildW.mexmaci64
Expected in: /usr/lib/libstdc++.6.0.9.dylib

像我一样有很多问题,但我从来没有找到这个问题的解决方案。前面的线程提到了更新的clang和使用的clang之间的冲突。

以下是关于类似问题的问题的例子。

  1. Need help finding Undefined Symbols
  2. Handling "dyld: lazy symbol binding failed: Symbol not found" error when nm does not find symbol
  3. https://github.com/Homebrew/homebrew-core/issues/4902
  4. 我目前安装了Xcode 9.2。

    在matlab中,我使用MacOSX10.13.sdk,如下所示。

    >> edit ([matlabroot '/bin/maci64/mexopts/clang++_maci64.xml'])
    
    ...
    ...
    <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk" />             
    <cmdReturns name="find $$ -name MacOSX10.13.sdk" />
    

    另外,我发现“/ usr / lib”中有三个文件

    /usr/lib/libstdc++.6.0.9.dylib
    /usr/lib/libstdc++.6.dylib
    /usr/lib/libstdc++.dylib
    

    任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

符号__ZNKSt5ctypeIcE13_M_widen_initEv(解码std::ctype<char>::_M_widen_init() const)在libstdc++.dylib中定义,但如果您执行

nm /usr/lib/libstdc++.dylib | fgrep __ZNKSt5ctypeIcE13_M_widen_initEv

你会得到

0000000000006a14 t __ZNKSt5ctypeIcE13_M_widen_initEv

结果。 t表示它在TEXT部分中定义,但它是 local 符号,无法从库外引用。

Xcode中的Clang使用

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/lib/libstdc++.tbd 

用于链接而不是/usr/lib/libstdc++.dylib。这是一个人类可读文件,仅包含libstdc++.dylib中公共符号的名称。由于上面的符号是私有的,因此未列在.tbd文件中。