使用 libc 和 clang 编译涉及 boost::program_options 的示例程序c 0x 模式会导致未定义的符号错误。但是,相同的代码可以使用 g -mp-4.7 或 clang 在没有 libc 的情况下成功编译和链接。
问题是由于 boost::program_options 的不兼容性引起的,它是使用构建的libstdc 和 libc 。为了避免意外混合不兼容的标准库并确保二进制兼容性,libc 采用了称为“内联命名空间”的 C 11 功能。这会更改 std::string 的应用程序二进制接口 (ABI),而不影响其应用程序编程接口 (API)。
要解决此兼容性问题,请使用 clang 和以下命令重建 boost -stdlib=libc 标志:
clang++ -stdlib=libc++
此操作将使用 libc 重建 boost,并避免因使用不兼容的标准库而产生的符号冲突。
以上是为什么 c 0x 模式下的 libc 的 clang 无法链接这个 boost::program_options 示例?的详细内容。更多信息请关注PHP中文网其他相关文章!