cmake编译时报错: 找不到头文件math.h stdlib.h
fatal error: stdlib.h: No such file or directory
fatal error: math.h: No such file or directory
In file included from /usr/local/include/c++/6.2.0/bits/stl_algo.h:59:0,
from /usr/local/include/c++/6.2.0/algorithm:62,
from /home/dmelo/proj2/opencv/modules/core/include/opencv2/core/base.hpp:55,
from /home/dmelo/proj2/opencv/modules/core/include/opencv2/core.hpp:54,
from /home/dmelo/proj2/opencv/modules/highgui/include/opencv2/highgui.hpp:46,
from /home/dmelo/proj2/opencv/build/modules/highgui/precomp.hpp:45:
/usr/local/include/c++/6.2.0/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
compilation terminated.
解决方法1
修改头文件
Solution is Simple...
1: just go to usr/include/c++
2: chose whatever version you are using. In my case it was 6, So chose folder 6
3: look for cmath.c and open it. Change "#include_next <math.h>" to "#include<math.h>"
4: Save it and Done..
If you are having error with stdlib.h then also do the same for "cstdlib.c" file
解决方法2
选择编译器版本,使用特定版本编译器编译,例如用g++ gcc 5
CC=/usr/bin/gcc-5 CXX=/usr/bin/g++-5 cmake .
或者修改 CMakeLists.txt 文件,添加如下命令
SET(CMAKE_C_COMPILER “/usr/bin/gcc-5”)
SET(CMAKE_CXX_COMPILER “/usr/bin/g++-5”)
解决方法3
关闭预编译头文件
cmake . -DENABLE_PRECOMPILED_HEADERS=OFF
解决办法4
一些库依赖没有下下来,新建的库拉一下submodule
git submodule init
git submodule updata
上述几种办法中解决方法2是正解
下面讲解linux下gcc、g++不同版本的安装和切换
Ubuntu 18.04预装GCC版本为7.3,但有时在编译是需要用的不同gcc版本,下面介绍,如何安装不同的gcc 和g++,并设置根据不同的需要在不同版本之间切换。
-
可以通过如下命令查看当前安装的版本:
ls /usr/bin/gcc*
-
安装gcc-4.8 和gcc-5:
sudo apt install gcc-4.8 g++ -4.8
sudo apt install gcc-5 g++ -5
-
使用update-alternatives设置gcc和g++:
update-alternatives是ubuntu系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本。
其中40 ,50 ,70是优先级数值可以自己设定,–slave能保证gcc和g++保持相同的版本。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g+±4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g+±5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g+±7
-
使用如下命令选择gcc的版本:
sudo update-alternatives --config gcc
可以看到当前gcc默认的版本是gcc-7,下面我们修改为gcc-4.8,直接选择编号即可。
$ sudo update-alternatives --config gcc
There are 3 choices for the alternative gcc (providing /usr/bin/gcc).
* 0 /usr/bin/gcc-7 70 auto mode
1 /usr/bin/gcc-4.8 40 manual mode
2 /usr/bin/gcc-5 50 manual mode
3 /usr/bin/gcc-7 70 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/gcc-4.8 to provide /usr/bin/gcc (gcc) in manual mode
-
验证是否修改成功:
gcc -v
g++ -v
删除
删除某个gcc版本的选项的话,可以使用
sudo update-alternatives --remove gcc /usr/bin/gcc-4.5
再使用apt-remove删除即可
参考:
https://github.com/highfidelity/hifi/issues/8047
https://blog.argcv.com/articles/4655.c
https://www.jianshu.com/p/f66eed3a3a25
http://tuxamito.com/wiki/index.php/Installing_newer_GCC_versions_in_Ubuntu
cmake编译时报错: 找不到头文件math.h stdlib.hfatal error: stdlib.h: No such file or directoryfatal error: math.h: No such file or directoryIn file included from /usr/local/include/c++/6.2.0/bits/stl_algo.h:59...
这个时候按道理能够成功解决,但是却出现如下错误:
root@chenxiaojian:/etc/apt# apt-get install libc6-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incomin
stdlib.h: No such file or directory问题问题原因解决办法方法一方法二参考资料
今天在编译一个QT项目的时候报错了,错误如下:
stdlib.h: No such file or directory
我用的是Ubuntu和QT,很奇怪,之前编译都能成功,这次失败了,网上找到了解决办法。
问题原因
网上的说法:
这是由于gcc7已经吧stdlib.h纳入了lib...
今天又学会了一招。
在学习软渲染的时候,首先找到了https://blog.csdn.net/puppet_master/article/details/80317178
的文字,然后末尾有git开源代码,很舒服,有代码就是好办了。
但是最苦恼的时候,C++的一堆包含目录设置。
首先是找不到math.h文件,那么此时,要遍历c盘然后找到math.h的目录,可以发现是:
C:\Program Fil...
/usr/include/c++/8/cstdlib:75: error: stdlib.h: No such file or directory
In file included from /usr/include/c++/8/ext/string_conversions.h:41,
from /usr/include/c++/8/bits/basic_string.h:6400,
from /usr/include/c++/8/stri...
这是因为编译器在编译程序时需要用到stdint-gcc.h这个文件,但是它没有找到这个文件,导致编译出现错误。这个文件是C/C++标准库中的头文件,定义了整数类型的别名,便于代码的移植性和可读性。
要解决这个问题,需要找到并安装这个文件。如果是在Linux系统上,可以使用命令sudo apt-get install libc-dev或者sudo yum install glibc-devel安装C/C++标准库。如果还是找不到这个文件,可以在编译命令中加上-I选项指定头文件路径,例如:gcc -I/usr/include。
总的来说,出现这个错误是因为缺少stdint-gcc.h文件,解决方法就是安装C/C++标准库或者指定头文件路径。
他人是一面镜子,保持谦虚的态度: