使用LLVM的libc++时,__1符号从何而来?
Where does the __1 symbol come from when using LLVM's libc++?
我看到了很多像 Apple Mach-O Linker (Id) Error and 这样的问题。问题通常描述为:
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)
问题通常会简化为 mixing/matching -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?
我看到了很多像 Apple Mach-O Linker (Id) Error and
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)
问题通常会简化为 mixing/matching -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?