ubuntu GCC4 Linux错误,因为包含X11,不知何故包含BOOST

wqsoz72f  于 2023-04-29  发布在  Linux
关注(0)|答案(1)|浏览(153)

我正在用glm glfw开发一个基于vulkan的小项目,添加了其他几个构造函数库,如rplidar和accelerometer sensor,一切都很顺利,即使我从simple 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并成功与项目链接,但仍然无效。
我从Xlib检查了文件的错误。h和更深的看到,在这些文件中根本没有使用boost!好奇怪!
在怀疑“Complex”类名被用在“limits”或“algorithm”库中(在我的头中重新排序了包含)以避免想象中的冲突时,我暂时注解了它们,但仍然是同样的错误。
这几天我在论坛上搜索类似的情况,但没有。我真的希望在这个问题上能得到一些帮助。我必须补充的是,在这个错误出现的那天,ubuntu进行了更新,但没有任何相关内容:最相关的是vulkan-layers在那一刻更新,但单独的Vulkan工作得很好。我不知道

kx1ctssn

kx1ctssn1#

$ fgrep Complex /usr/include/X11/X.h
#define Complex                 0       /* paths may intersect */
$

避免在同一个源文件中使用XLib包含和 * 任何 * 中等复杂的第三方包含,特别是XLib * 上面 * 所说的复杂的第三方包含,因为XLib有一个 * 讨厌的 * 习惯,即#define非常常见的名称。但如果必须这样做,请注意错误消息,例如您得到的和#undef

相关问题