当MinGw包含目录添加到搜索路径时,MinGW中找不到<stdlib.h>

时间:2017-10-04 00:20:44

标签: c++ windows libcurl mingw32

我收到了错误

c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cstdlib:75:25: fatal error: stdlib.h: No such file or directory
 #include_next <stdlib.h>

将C:\ MinGW \ include添加到编译器时包含搜索路径:
echo "#include <cstdlib>" | g++ -x c++ - -isystem C:/MinGW/include -o /dev/nul

但是CMake这样做是因为一些库(例如libcurl)被安装到C:\ MinGW中,因此curl包括dir是C:\ MinGW \ include

我做错了什么或者这是MinGW中的错误? 我正在使用MinGW 5.0.1。

什么有用:echo "#include <cstdlib>" | g++ -x c++ - -IC:/MinGW/include -o /dev/nul但我不想将非卷曲包括dirs等包含在非系统包含中。

mingw/include/c++/cstdlib: stdlib.h: No such file or directory

相关

背景:我正在使用cmake来生成makefile。因此,CMakelists.txt中有find_package(Curl)include_directories(SYSTEM CURL_INCLUDE_DIRS)。当libcurl安装到C:/ MinGW时,CURL_INCLUDE_DIRS将是C:/ MinGW / include,因此-isystem包含。我不想省略SYSTEM,因为这可能会导致为libcurl标头生成警告。当然还有更多的库也以相同的方式安装,我想保持cmake文件的可移植性。

2 个答案:

答案 0 :(得分:0)

问题在于使用include_next C ++标准头。根据{{​​3}},它将包含标题searching the list of header file directories after the directory in which the current file was found。标准包含目录(使用g++ -v)是(更正的):

  

C:\ MinGW的\ lib中/ GCC /的mingw32 / 6.3.0 /包括/ C ++
  C:\ MinGW的\ lib中/ GCC /的mingw32 / 6.3.0 /包括/ C ++ /的mingw32
  C:\ MinGW的\ lib中/ GCC /的mingw32 / 6.3.0 /包括/ C ++ /向后
  C:\ MinGW的\ lib中/ GCC /的mingw32 / 6.3.0 /包括
  C:\ MinGW的\包括
  C:\ MinGW的\ lib中/ GCC /的mingw32 / 6.3.0 /包括固定
  C:\ MinGW的\的mingw32 /包括

因此,cstdlib会在c:\mingw\lib/gcc/mingw32/6.3.0/include/c++中找到,include_next "stdlib.h"会在此列表中更深入,并会在c:\mingw\include中找到。

现在出现问题:将库安装到C:\mingw(使用库中的libbininclude文件夹)将使CMake在那里正确找到并添加C:\mingw\include文件夹明确指向包含列表。这两个案例如下:

  1. 添加为-I:使用ignoring ... as it is a non-system directory that duplicates a system directory
  2. 的g ++会忽略这一点
  3. 添加为-isystem:这会将 prepend 目录添加到上面的列表中,并将其作为副本从其余部分中删除(使用-v选项进行验证)。这意味着当找到cstdlib并评估include_next时,它将仅向下搜索列表。但是包含stdlib.h的目录不再在列表中,而是向上,因此不会被搜索。因此错误。
    注意:我发现了include_next的另一个定义,它只丢弃包含标题的目录。在这种情况下,这可能会起作用,但可能会导致循环并被更改为所描述的行为。
  4. 到目前为止,解决方案只是将库安装或复制到C:\mingw\mingw32

答案 1 :(得分:-1)

为什么不喜欢使用C ++ IDE。有很多好的IDE,比如Code Blocks,Dev C ++。我使用的是Dev C ++。如果使用IDE,你将不会遇到这个问题。