Ich sehe eine ganze Reihe von Fragen wie Apple Mach-O Linker (Id) Error und Undefined symbols in cryptopp at IOS 64-bit project. Das Problem wird in der Regel wie beschrieben:Woher kommt das __1-Symbol, wenn LLVMs libC++ verwendet wird?
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)
Das Problem reduziert oft Mischen/Matching -stdlib=libc++
(LLVM C++ Laufzeit) und -stdlib=libstdc++
(GNU C++ Laufzeit). Die LLVM C++ Laufzeit (libc++
) hat ein __1
Dekorationssymbol, aber die GNU C++ Laufzeit libstdc++
fehlt das __1
Symbol in seinem Namen. Es verursacht Linker-Probleme für Symbole, die scheinbar denselben Namen haben (wie std::string
).
Woher kommt das __1
Symbol, wenn LLVMs libC++ verwendet wird?
Warum wurde das Problem nicht mit einem Namespace gnu
Namespace und ein llvm
gelöst?
Hier ist eine weitere Frage: libc++ - stop std renaming to std::__1?. Aber es vermisst den Punkt, dass eine Umbenennung nicht stattfindet.
Es ist ein Inline-Namespace, der libC++ für Versionierung verwendet. – Praetorian