#include_next <stdlib.h> qt fatal error: stdlib.h: 没有那个文件或目录

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值