添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

qt4编译正常,改成qt5后遇到问题

usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o tmp/obj/main.o main.cpp
In file included from /usr/include/c++/7/bits/stl_algo.h:59:0,
                 from /usr/include/c++/7/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:110,
                 from /usr/include/x86_64-linux-gnu/qt5/QtGui/qtguiglobal.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qtwidgetsglobal.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qapplication.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/QApplication:1,
                 from main.cpp:1:
/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: 没有那个文件或目录
 #include_next <stdlib.h>
               ^~~~~~~~~~
compilation terminated.
make: *** [Makefile:21224:tmp/obj/main.o] 错误 1

这是由于gcc7已经吧stdlib.h纳入了libstdc++以进行更好的优化,C Library的头文件stdlib.h使用 Include_next,而include_next对gcc系统头文件路径很敏感

1 在.pro文件中添加如下一行:  
​​​​​​​DEFINES += ENABLE_PRECOMPILED_HEADERS=OFF

2  在.pro文件中添加如下一行:

QMAKE_CFLAGS_ISYSTEM = -I

在.pro文件中去除如下一行:

INCLUDEPATH +=/usr/include
也可以解决问题

最后,为了兼容qt4\qt5以及交叉编译

使用下面方式。

greaterThan(QT_MAJOR_VERSION, 4): {
    QT += widgets
    QMAKE_CFLAGS_ISYSTEM = -I

https://stackoverflow.com/questions/52532936/usr-include-c-7-cstdlib7515-fatal-error-stdlib-h-no-such-file-or-directo

cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_NEW_PYTHON_SUPPORT=ON -DINSTALL_PYTHON_EXAMPLES=ON -DWITH_TBB=ON -DWITH_V4L=ON -DINSTALL_C_EXAMPLES=ON -DBUILD_EXAMPLES=ON -D TL;DR:如果之前没问题,突然出现这个错误,那可能是因为改了include搜索的路径(比如定义了和环境变量)。如果确实如此,试试把这些变量取消或者从中删除含有的文件夹。 在用gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu进行交叉编译时,出现报错: /home/Likejiang/5GNR/gcc-linaro-7.5.0-2019.12-x8664aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cstdlib:75:15: fatal error: stdlib.h: No such file or directory #include_next <std        原创文章,转载请注明出处,谢谢!               作者:清林,博客名:飞空静渡 #include如果从纯粹的text文件来说,#include的作用就是搜索它后面指示的文件,并把这个文件的内容加到当前的文件中。一般我们编程时,都是包含一些与.h为后缀的头文件,但是它可以包含任何后缀的任何形式的text文件的,而不仅仅是.h为后缀的头文件。 这是因为环境变量里面你在CPLUS_INCLUDE_PATH变量引入/usr/include。解决方法就是删除/usr/include引用,如果你是终端临时设置的重启终端便可以解决问题。如果你是~/.bashrc里面设置的把/usr/include去掉即可。此外还有一种情况是你零时在终端设置了。 stdlib文件即standard library标准库头文件stdlib.h里面定义了五种类型、一些宏和通用工具函数。 类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、realloc()、free... error: ‘sin’ was not declared in this scope QPointF up_startPt1(m_coverBallRadius*cos(30.0*Rad), -m_coverBallRadius*sin(30.0*Rad)); 解决办法: 添加函数的头文件 #include <complex> // An hig