什么(如果有)是处理 Mac 上的 libc++ 和 stdlibc++ 之间的 ABI 不一致的好方法?
问题:许多 c++11 功能需要 C++ 标准库的新 libc++ 实现。但是 libc++ 与旧的 libstdc++ 不兼容 ABI,而目前大多数软件通常链接到后者。例如,系统编译器仍然使用 stdlibc++,这意味着我使用 macports 安装的所有库对于像字符串这样的标准类都有不同的 ABI,并且无法与大量使用 c++11 的项目链接。
我目前的解决方案是:保留两个版本的库,这通常会导致问题(boost、opencv 等)并链接到适当的版本。
我想有人可能会建议,如果我真的想使用 libc++,我应该使用 stdlibc++ 清除系统中的任何内容,并确保来自 macports(或其他任何地方)的任何内容都只与 libc++ 链接。你可以看到这项任务看起来是多么艰巨。
有没有人想出一种与我们生活的“between-stdlib-limbo”相关的好方法?:)
编辑:我正在更明确地提出一个隐含的后续问题:Apple 将 libc++ 和 libstdc++ 与他们的系统一起提供。假设一个人攻击了根本问题并尝试切换到 libc++-only。鉴于当前安装在系统上的 100% 库(一些随系统附带,其中大部分通过 macports,少数通过手动编译)链接到 libstdc++(如果有的话),从 libstdc++ 切换到 libc++ 的推荐方法是什么)? 有没有人这样做并幸存下来?