我收到了错误
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文件的可移植性。
答案 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
(使用库中的lib
,bin
和include
文件夹)将使CMake在那里正确找到并添加C:\mingw\include
文件夹明确指向包含列表。这两个案例如下:
-I
:使用ignoring ... as it is a non-system directory that duplicates a system directory
-isystem
:这会将 prepend 目录添加到上面的列表中,并将其作为副本从其余部分中删除(使用-v
选项进行验证)。这意味着当找到cstdlib
并评估include_next
时,它将仅向下搜索列表。但是包含stdlib.h
的目录不再在列表中,而是向上,因此不会被搜索。因此错误。include_next
的另一个定义,它只丢弃包含标题的目录。在这种情况下,这可能会起作用,但可能会导致循环并被更改为所描述的行为。到目前为止,解决方案只是将库安装或复制到C:\mingw\mingw32
。
答案 1 :(得分:-1)
为什么不喜欢使用C ++ IDE。有很多好的IDE,比如Code Blocks,Dev C ++。我使用的是Dev C ++。如果使用IDE,你将不会遇到这个问题。