包含 X11 的 GCC4 linux 错误以某种方式包含 BOOST

问题描述 投票:0回答:1

我正在开发一个基于 vulkan 的小项目,其中 glm glfw 添加了其他几个构造函数库,如 rplidar 和加速度计传感器,一切顺利,即使我从简单的 make 传递到 cmake 以使用 cgal 库,直到突然之间,出现此错误:

g++ -std=c++17 -O2 -I. -I./dependencies/include -I./dependencies/src -L./dependencies/lib -Wall -funsigned-char -fPIC -o vulkanRPLidar main.cpp -lglfw3 -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi -lrt -lstdc++ -lsl_lidar_sdk
In file included from /usr/include/X11/Xlib.h:44,
                 from main.h:30,
                 from main.cpp:1:
/usr/include/boost/math/tools/roots.hpp:793:16: error: expected identifier before numeric constant
  793 | template<class Complex, class F>
      |                ^~~~~~~
/usr/include/boost/math/tools/roots.hpp:793:16: error: expected ‘>’ before numeric constant
/usr/include/boost/math/tools/roots.hpp:794:1: error: expected unqualified-id before numeric constant
  794 | Complex complex_newton(F g, Complex guess, int max_iterations = std::numeric_limits<typename Complex::value_type>::digits)
      | ^~~~~~~

这里我用简单的make又试了一次,但是用cmake还是一样的错误。我尝试了从 X11 到 Boost 的所有软件包重新安装,但都是徒劳(完全相同的错误)。甚至从源代码 1.82.0 安装了 boost 并成功链接到项目但仍然是徒劳的。

我检查了 Xlib.h 中的文件错误并更深入地查看这些文件中根本没有使用 boost !!!太奇怪了!

怀疑“限制”或“算法”库中使用了“复杂”类名(已重新排序包含在我的标题中)以避免想象中的冲突我暂时评论了它们,但仍然是同样的错误。

这几天我一直在论坛上搜索类似的情况,但一无所获。我真的希望在这个问题上找到一些帮助。我必须补充一点,在出现此错误的那一天进行了 ubuntu 更新,但没有任何相关:最相关的是那一刻更新的 vulkan-layers,但单独的 Vulkan 工作得很好......我不知道🥺

ubuntu boost cmake makefile x11
1个回答
0
投票
$ fgrep Complex /usr/include/X11/X.h
#define Complex                 0       /* paths may intersect */
$

避免在同一个源文件中使用X11 include和任何中等复杂的第三方includes,尤其是X11 上面说的复杂的第三方include,因为X11有一个讨厌的习惯

#define
取很普通的名字。但是,如果必须,请注意错误消息,例如您收到的错误消息和
#undef
.

© www.soinside.com 2019 - 2024. All rights reserved.