背景:
尝试在 C 0x 模式下使用 Clang 和 libc 编译和链接 Boost::program_options 示例时,出现以下错误:
Undefined symbols for architecture x86_64: // Various undefined symbols related to Boost::program_options
解释:
此错误的主要原因是 libc 与 GCC 的 libstdc 不二进制兼容。具体来说:
解决方案:
要解决此问题,您必须使用 Clang 以 libc 作为标准库重建 Boost:
clang++ -stdlib=libc++ ...
二进制不兼容的原因:
为了防止由于二进制不兼容导致的意外混合和运行时崩溃,libc 利用 C 11 的内联命名空间功能来修改 ABI(应用程序二进制接口) std::string 同时保持相同的 API(应用程序编程接口)。这确保链接器可以区分来自 libstdc 的 std::string 和来自 libc 的 std::string 。
以上是为什么在 C 0x 模式下使用 libc 的 Clang 无法链接 Boost::program_options 示例?的详细内容。更多信息请关注PHP中文网其他相关文章!