使用带有 Clang 的 Boost 编译 c++ 项目时出现问题

Posted

技术标签:

【中文标题】使用带有 Clang 的 Boost 编译 c++ 项目时出现问题【英文标题】:Problem compiling c++ project using Boost with Clang 【发布时间】:2011-08-09 18:29:51 【问题描述】:

我决定通过编译我的一个已经在 GCC 下编译的 c++ 项目来尝试 Clang。我的项目依赖于 Boost,并且由于包含“boost/asio.hpp”clang 在使用 pedantic 标志进行编译时出现以下错误:

lib/boost_1_46_1/mac/boost/date_time/date_generators.hpp:37:30: error: extra ';' 
inside a class [-pedantic]

如果我想编译这个项目,我有哪些选择?我不希望编辑出现此问题的各种增强标头。

【问题讨论】:

/usr/local/ 或类似中没有安装 boost 的任何原因? 没有。虽然如果这样做能解决问题,我会感到非常惊讶;) 我在使用 clang 时遇到 boost 错误,但是当我将 boost 放入系统包含文件夹时它们就消失了。 【参考方案1】:

我刚刚查看了标题内部,有问题的行是year_based_generator() ;,这是一个微不足道的构造函数。所以 clang 是正确的,; 是不必要的。

既然 -pedantic 可以捕捉到这样的东西,我认为最好的方法是告知 boost 人员这一点,特别是因为他们对这些分号不一致,所以这几乎不是他们编码指南的一部分。

您可以使用编译指示仅对有问题的 boost 库禁用它,而不是从整体上禁用 -pedantic。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-pedantic"
// include boost headers
#pragma clang diagnostic pop

我认为应该可以。

【讨论】:

我实际上曾经走这条路,它导致了一个新错误,其要点为:pragma clang diagnostic ignored "-pedantic"。 这很奇怪 - 根据(这里)[clang.llvm.org/docs/UsersManual.html#diagnostics_commandline] 这是有效代码。无法在 atm 测试它(这里没有叮当声),但我很惊讶这不起作用。 可悲的是 -Wpedantic 也不起作用并导致:“错误:未知警告组 '-Wpedantic',忽略 [-Wunknown-pragmas]”【参考方案2】:

您是否给 clang 提供了 -pedantic 选项?看起来 -pedantic 正在触发错误。您可以随时删除该选项。

【讨论】:

是的,我是。尽管删除该选项会使错误消失,但我想先考虑其他解决方案。这将是最后的手段...... 我不相信还有其他方法。我刚刚在我的机器上试了一下。 g++ 没有用 pedantic 报告任何错误。我没有clang,但我猜它确实将分号识别为无用。这只是clang比gcc更严格的一种情况。 Eugh,尽管我不想这样做,但它似乎是编辑提升标题的唯一方法。

以上是关于使用带有 Clang 的 Boost 编译 c++ 项目时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 clang++ -stdlib=libc++ 的 libstdc++ 编译库

如何使用自动工具编译带有 clang 和选项 -std=c++11 的项目

boost::spirit 算术公式解析器无法编译

Ubuntu 15.04 clang++ 3.6 编译boost 1.59/1.55

Windows下的Mingw + clang vs Boost:不同类型的错误

如何使用 Clang 编译 C++?