- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux编译多个不同的目录下文件以与静态库
Linux编译多个不同目录下的文件以及静态库、动态库的使用一、??编译不同目录下的多个文件
各个文件的布局如下:
? ? ? ?
head.h文件的代码:
[cpp]?view plaincopy
#ifndef??HEAD_H??
#define??HEAD_H??
??
int?add(int?a,?int?b);??
??
??
#endif??/*HEAD_H*/??
head.cpp文件的代码:
[cpp]?view plaincopy
#include????head.h??
??
int?add(int?a,?int?b)??
{??
????return?a?+?b;??
}??
main.cpp文件的代码(head.h头文件还没包含)
?
[cpp]?view plaincopy
#include??iostream??
using?namespace?std;??
??
int?main(int?argc,?char?*argv[])??
{??
????coutadd(3,?5)endl;??
????return?0;??
}??
1)??以相对路径的方式直接包含头文件
为了能够使用add函数,必须包含add所在的头文件。 最简单的方法是直接在main.cpp文件中,用相对路径包含head.h文件.即 #include”function/head.h”。完整代码为
[cpp]?view plaincopy
#include??iostream??
#include????function/head.h??
using?namespace?std;??
??
int?main(int?argc,?char?*argv[])??
{??
????coutadd(3,?5)endl;??
????return?0;??
}??
此时,编译命令为 :$g++ main.cpp function/head.cpp -o main
? ? ? ? 这种用相对路径包含头文件的方式有很多弊端。当function目录改成其它名字,或者head.h文件放到其它目录了,这时都要对main.cpp文件进行修改,如果head.h头文件被很多其它文件包含的话,这个工作量就大多了。
2)??用编译选项 –I(大写i)
? ? ? ? 其实,可以想一下,为什么iostream文件不在当前目录下,就可以直接使用呢?这是因为,编译器会在一些默认的目录下(/usr/include,/usr/inlucde/c++/4.4.3等目录)搜索头文件。所以,iostream头文件不用添加。但我们不能每写一个头文件就放到那里。
? ? ? ??知道了原理,现在来用一下一个编译选项 –I(include的缩写)用来告诉编译器,还可以去哪里找头文件。
? ? ? ? 使用这个编译命令,$g++ main.cpp function/head.cpp -Ifunction -o main
? ? ? ? 此时main.cpp文件写成
[cpp]?view plaincopy
#include??iostream??
#include??head.h??
using?namespace?std;??
??
int?main(int?argc,?char?*argv[])??
{??
????coutadd(3,?5)endl;??
????return?0;??
}??
? ? ? ??可以看到head.h文件是用而不是””。想一下C语言书中,两者的区别。这说明,用-I选项,相当于说明了一条标准路径。
3)??使用.o文件
? ? ? ??此时,对于head.cpp文件,在编译命令中,还是要用到路径function/head.cpp。现在的想法是去掉这个。这时可以先根据head.cpp文件生成一个.o文件,然后就可以了去掉那个路径了。
?
? ? ? ??先cd 到function目录。
? ? ? ??输入命令:$g++ -c head.cpp -o head.o
? ? ? ??生成一个head.o目标文件,
?
? ? ? ??此时把生成的head.o文件复制到function的父目录,就是main.cpp所在的目录。
? ? ? ??然后回到function的父目录,输入命令$g++ main.cpp head.o -Ifunction -o main
? ? ? ??此时,直接使用head.o即可,无需head.cpp了。但头文件head.h还是要的。因为编译的时候要用到。链接的时候不用头文件。这个可以拆分成两条命令
? ? ??? $g++ -c main.cpp -Ifunction -o main.o
? ? ? ? $g++ main
文档评论(0)