我正在Mac OS X (10.8.2)下使用C++编程,最近需要使用C++11特性,可以通过clang++编译器和libc++ stdlib实现。但是,我还需要使用一些使用了libstdc++链接的旧库(来自MacPorts)。
在此过程中,我遇到了链接错误,因为我使用的旧库头文件,例如 std::string
,需要解析成 std::__1::basic_string
(即std::string
的libc++实现),而不是std::basic_string
实现。
在开发中是否有一种混合两个库的方法(例如使用一些预处理器标志)?
std::exception
的异常并在动态库边界之间转移内存所有权。我怀疑这可能比gcc自己的4.2版本提供了更好的ABI兼容性。请注意,根据std规范,甚至std::string
在C++98/03和C++11之间也不具有ABI兼容性。前者被广泛地引用计数,而后者则被禁止。 - Howard Hinnantstd::list
版本不与C++11规范中的std::list
兼容。换句话说,你关于libc++的评论同样适用于早期的libstdc++版本(如果不是更适用)。libc++与早期的libstdc++的ABI不兼容的程度与符合C++11标准的libstdc++相同。 - Howard Hinnant