c++ - 使用LLVM的libc++时__1符号从何而来?

标签 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? .但它有点忽略了重命名不会发生的要点。

最佳答案

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

libc++ 有类似的东西

namespace std {
    inline namespace __1 {
        ....

更多信息请访问 What are inline namespaces for?

关于c++ - 使用LLVM的libc++时__1符号从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29293394/

相关文章:

linux - 升级的构建机器(Debian),构建无法在服务器(CentOS)上运行

header-files - iostream 和 bits/stdc++.h 有什么区别??我们什么时候需要使用它们?

c++ - C++11 是否要求分配器是默认可构造的,libstdc++ 和 libc++ 不同意?

c++ - MacOS 上的 CL_INVALID_BUILD_OPTIONS

c++ - 将 c++ 对象作为指针传递给 Rcpp 中另一个函数的重用

debugging - 如何更改符号文件(pdb)中源文件的位置

dataframe - 如何将列名作为参数传递给 Julia DataFrame?

android - 单声道 Droid : missing __ANDROID__ symbol

c++ - 单击按钮查看图像。 qt

c++ - 错误 : ISO C++ forbids comparison between pointer and integer