【问题标题】:/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory #include_next <stdlib.h>/usr/include/c++/7/cstdlib:75:15:致命错误:stdlib.h:没有这样的文件或目录#include_next <stdlib.h>
【发布时间】:2019-03-03 03:06:21
【问题描述】:

我有使用 opengl 和 CGAL 的 c++ qt 项目,但我有以下 错误

/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
 #include_next <stdlib.h>

我搜索了有关 -DENABLE_PRECOMPILED_HEADERS=OFF 的问题和大多数解决方案 我在 .pro 文件中使用它并没有解决问题。

.pro 文件:

QT       += core gui opengl
QT += xml
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = try_gui
TEMPLATE = app


    DEFINES += QT_DEPRECATED_WARNINGS

    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


     DENABLE_PRECOMPILED_HEADERS=OFF
    SOURCES += \
            main.cpp \
            mainwindow.cpp \
        my_polyhedron.cpp \
        myqglwidget.cpp

    HEADERS += \
            mainwindow.h \
        my_polyhedron.h \
        myqglwidget.h \
        My_Halfedge_base.h \
        My_Face_base.h

    FORMS += \
            mainwindow.ui

LIBS += -L/lib64 -lgmp -lCGAL

    INCLUDEPATH +=/usr/include

当我从 .pro 文件中删除 INCLUDEPATH +=/usr/include 时问题解决了
但是在到达 CGAL 时出现了另一个错误:

/usr/include/boost/graph/detail/adjacency_list.hpp:1755:5: note:   template argument deduction/substitution failed:
../try_gui/my_polyhedron.cpp:203:78: note:   ‘Surface {aka CGAL::Polyhedron_3<CGAL::Simple_cartesian<double> >}’ is not derived from ‘const boost::adj_list_helper<Config, Base>’
              .edge_index_map  (boost::get(CGAL::edge_external_index  ,surface))
                                                                              ^
../try_gui/my_polyhedron.cpp: In member function ‘void My_Polyhedron::drawTree(MyQGLWidget*, int)’:
../try_gui/my_polyhedron.cpp:329:27: error: ‘class CGAL::Kd_tree_node<CGAL::Search_traits_3<CGAL::Simple_cartesian<double> >, CGAL::Fair<CGAL::Search_traits_3<CGAL::Simple_cartesian<double> >, CGAL::Plane_separator<double> >, CGAL::Boolean_tag<true> >’ has no member named ‘size’
             if(leaves[i]->size() < 1) continue;
                           ^~~~
../try_gui/my_polyhedron.cpp:331:52: error: ‘class CGAL::Kd_tree_node<CGAL::Search_traits_3<CGAL::Simple_cartesian<double> >, CGAL::Fair<CGAL::Search_traits_3<CGAL::Simple_cartesian<double> >, CGAL::Plane_separator<double> >, CGAL::Boolean_tag<true> >’ has no member named ‘begin’
             Tree::Point_d_iterator it = leaves[i]->begin();

n file included from /usr/include/CGAL/subdivision_method_3.h:31:0,
                 from ../try_gui/my_polyhedron.cpp:6:
/usr/include/CGAL/Subdivision_method_3/subdivision_methods_3.h: In instantiation of ‘void CGAL::Subdivision_method_3::Sqrt3_subdivision(PolygonMesh&, int) [with PolygonMesh = My_Polyhedron]’:
../try_gui/my_polyhedron.cpp:175:60:   required from here
/usr/include/CGAL/Subdivision_method_3/subdivision_methods_3.h:236:16: error: no type named ‘type’ in ‘struct boost::property_map<My_Polyhedron, boost::vertex_point_t, void>’
   Sqrt3(pmesh, Sqrt3_mask_3<PolygonMesh>(&pmesh, get(vertex_point,pmesh)), step);

有什么帮助吗?

【问题讨论】:

  • 你能显示代码吗?如果它太大那么你可以用小代码重新创建问题并将其发布在这里吗?
  • 看起来您在 7 月份两次发布了相同的问题和解决方案。
  • @molbdnilo 是的,通过删除 INCLUDEPATH +=/usr/include 解决了这个问题,但它会导致另一个关于访问 CGAL 文件的错误——
  • 然后询问“关于到达 CGAL 文件”的错误。在 LIBS 中使用 -isystem 是一种可怕的 hack。
  • @MarcGlisse 我更新了帖子

标签: c++ opengl qt-creator cgal


【解决方案1】:

我通过添加来解决问题 QMAKE_CFLAGS_ISYSTEM = -I

到 .pro 文件

【讨论】:

    【解决方案2】:

    删除最后一行

    INCLUDEPATH +=/usr/include
    

    在 .pro 文件中

    如果这不起作用,请尝试再次运行 qmake

    【讨论】:

    • 它解决了问题,但它会导致另一个关于访问 CGAL 文件的错误
    • @n.m 这是我使用 cmake 的原因。只需在单独的文件中声明每个类,你就不需要 qmake(除非你的目标不是桌面)
    • 我不使用 cmake ,我正在使用 qt-creator 运行项目
    • @n.m Qt 创建者的美妙之处在于它可以与 CMAKE 一起使用。我一直在使用 Qt Creator 和 cmake
    • 你为什么不向我们描述“到达 CGAL 文件的其他错误”?
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2019-03-09
    • 2016-08-29
    • 2015-01-11
    相关资源
    最近更新 更多