首页 >后端开发 >C++ >为什么 c 0x 模式下的 libc 的 clang 无法链接这个 boost::program_options 示例?

为什么 c 0x 模式下的 libc 的 clang 无法链接这个 boost::program_options 示例?

Patricia Arquette
Patricia Arquette原创
2024-11-03 13:43:30365浏览

Why does clang with libc   in c  0x mode fail to link this boost::program_options example?

为什么 c 0x 模式下的 clang 与 libc 不链接这个 boost::program_options 示例?

使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn