相关文章推荐
活泼的番茄  ·  python ...·  2 周前    · 
谦和的乌冬面  ·  java Tuple ...·  1 月前    · 
想旅行的遥控器  ·  boost ...·  1 年前    · 

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++,并设置根据不同的需要在不同版本之间切换。

  1. 可以通过如下命令查看当前安装的版本:
    ls /usr/bin/gcc*

  2. 安装gcc-4.8 和gcc-5:

sudo apt install gcc-4.8 g++ -4.8
sudo apt install gcc-5 g++ -5

  1. 使用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

  2. 使用如下命令选择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
  1. 验证是否修改成功:

    gcc -v
    g++ -v
       
  2. 删除
    删除某个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++标准库或者指定头文件路径。
他人是一面镜子,保持谦虚的态度: c++filt _ZN2cv3MatC1EiiiRKNS_7Scalar_IdEE cv::Mat::Mat(int, int, int, cv::Scalar_<double> const&) 我的是这个问题,但是加了 target_link_libraries(pathplan ${OpenCV_LIBS}