同一段C++代码在win下和linux下同时编译时产生的头文件包含问题及解决
2017-04-28 09:16
483 查看
最近遇到一些包含头文件的问题。如下:
同一段C++代码,在win下用vs可以编译通过,但是在linux下就会产生头文件包含错误。之前一直没有对include进行深入研究,下面我们由这个问题出发来深入了解一下include以及解决办法。
首先明确两种include方法:
#include< file >编译程序会到系统目录中找文件~
#include”file” 编译程序会先从当前目录中找文件~
在vc下,系统目录的设置如下:
也就是说如果使用尖括号include,我们会优先从这些目录中去找头文件~
相对来说在linux下设置就比较简单了,那就是通过-I参数。有兴趣的可以看一下我们工程中的makefile文件是怎么使用的。
而通常我们会触发编译问题的用法就是双引号的include了,请注意,双引号的include会先从当前目录中查询,如果查询不到,还是会从系统目录中去查找文件。
这里有个问题:
当前目录下还有一个子目录sub,
sub里面有两个文件hdr.h和1.c,1.c中#include
"hdr.h",那么在当前目录编译sub/1.c,
它应该包含哪一个hdr.h?
答案是sub/hdr.h,因为1.c是在sub目录中~~~~
所以说到这里,我们再回头看一下最开始的问题,如何才能确保在win下和linux能同时编译过,保证include没有问题。
1.最好确保win下和linux下的目录结构统一,如果目录不统一的话,我们用#include""就会产生在某个平台下头文件找不到的情况
2.如果目录确实不统一,我们需要保证win下附加包含目录和linux下-I指定的参数要相同。为什么?因为当#include""查找不到当前头文件位置时会到系统目录中去寻找,如果win下指定了一个系统目录但是linux下没有指定,那么linux就会在编译时产生问题
3.由问题2我引申出一个想法就是,我们尽量用相对路径去代替绝对路径,这样就能减少问题的产生。
同一段C++代码,在win下用vs可以编译通过,但是在linux下就会产生头文件包含错误。之前一直没有对include进行深入研究,下面我们由这个问题出发来深入了解一下include以及解决办法。
首先明确两种include方法:
#include< file >编译程序会到系统目录中找文件~
#include”file” 编译程序会先从当前目录中找文件~
在vc下,系统目录的设置如下:
也就是说如果使用尖括号include,我们会优先从这些目录中去找头文件~
相对来说在linux下设置就比较简单了,那就是通过-I参数。有兴趣的可以看一下我们工程中的makefile文件是怎么使用的。
而通常我们会触发编译问题的用法就是双引号的include了,请注意,双引号的include会先从当前目录中查询,如果查询不到,还是会从系统目录中去查找文件。
这里有个问题:
当前目录下还有一个子目录sub,
sub里面有两个文件hdr.h和1.c,1.c中#include
"hdr.h",那么在当前目录编译sub/1.c,
它应该包含哪一个hdr.h?
答案是sub/hdr.h,因为1.c是在sub目录中~~~~
所以说到这里,我们再回头看一下最开始的问题,如何才能确保在win下和linux能同时编译过,保证include没有问题。
1.最好确保win下和linux下的目录结构统一,如果目录不统一的话,我们用#include""就会产生在某个平台下头文件找不到的情况
2.如果目录确实不统一,我们需要保证win下附加包含目录和linux下-I指定的参数要相同。为什么?因为当#include""查找不到当前头文件位置时会到系统目录中去寻找,如果win下指定了一个系统目录但是linux下没有指定,那么linux就会在编译时产生问题
3.由问题2我引申出一个想法就是,我们尽量用相对路径去代替绝对路径,这样就能减少问题的产生。
相关文章推荐
- .NET下编译C++代码时出现fatal error C1083: 无法打开包含文件:“iostream.h”: No such file or directory错误的解决方法.
- 引用原因.NET下编译C++代码时出现fatal error C1083: 无法打开包含文件:“iostream.h”: No such file or directory错误的解决方法.
- Xcode 5 中引入 C++ 模板代码无法编译通过的问题解决
- 解决linux下打开及解压文件后产生乱码的问题
- 解决在用ndk编译c++文件后libs/armeabi下的第三方so文件被删的问题
- Linux下使用Eclipse编译C/C++代码时遇到问题的说明
- 如何解决c++中循环包含头文件的问题
- linux下生产者与消费者问题代码,以及编译c代码时error:undefined reference to sem_wait 解决方法之一
- Linux&nbsp;C++多文件编译问题
- c++编译包含头文件问题
- 在Linux中编译文件是出现 Your intltool is too old. You need intltool 0.35.0 or later的问题怎么解决
- 解决vs2008中包含wlanapi.h头文件后编译不能通过的问题
- 解决C++头文件相互包含问题的方法
- MFC之头文件相互包含问题及解决方法 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
- 项目文件.NET下编译C++代码时出现fatal error C1083: 无法打开包括文件:“xuhk_JNIHelloWorld.h”: No such file or directory错误的解决方法。
- 同一段C++在Linux和windows下编译后的可执行文件有什么不同?
- Linux源码与编译出的目标文件汇编代码的一致性问题
- 写入本地路径时,文件是只读的,在前面加上一段代码可以解决这个问题