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

时间:2015-03-27 04:37:05

标签: c++ symbols libstdc++ libc++

我看到了大量问题,例如Apple Mach-O Linker (Id) ErrorUndefined symbols in cryptopp at IOS 64-bit project。问题通常描述为:

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++ - stop std renaming to std::__1?。但它有点忽略了重命名不会发生的重点。

1 个答案:

答案 0 :(得分:5)

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

libc ++有类似

的东西
namespace std {
    inline namespace __1 {
        ....

更多What are inline namespaces for?