使用LLVM的libc ++时,1个符号来自哪里?

我在iOS 64位项目中看到了大量的问题,如Apple Mach-O Linker(Id)错误和未定义符号在cryptopp中。 这个问题通常被描述为:

Undefined symbols for architecture i386:
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
      cv::gpu::error(char const*, char const*, int, char const*) in opencv2(gpumat.o)

这个问题通常会降低到混合/匹配-stdlib=libc++ (LLVM C ++运行时)和-stdlib=libstdc++ (GNU C ++运行时)。 LLVM C ++运行时( libc++ )有一个__1装饰符号,但GNU C ++运行库libstdc++缺少其名称中的__1符号。 它会导致似乎具有相同名称的符号(如std::string )的链接器问题。

在使用LLVM的libc ++时, __1符号来自哪里?

为什么gnu命名空间和llvm命名空间不能解决问题?


这里有一个相关的问题:libc ++ - 停止std重命名为std :: __ 1 ?. 但它有点错过了重命名不会发生的地步。


它来自C ++ 11内联命名空间

libc ++有类似的东西

namespace std {
    inline namespace __1 {
        ....

更多内容什么是内联命名空间?

链接地址: http://www.djcxy.com/p/84249.html

上一篇: 1 symbol come from when using LLVM's libc++?

下一篇: code and private members