我看到很多问题,例如 Apple Mach-O Linker (Id) Error和 Undefined 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/