linux的gcc 和WINDOWS VS的编译器的问题(重点是linux)

我以前是一直用WINDOWS里面的VS010或者2012的,他寻找头文件是要设置头文件.h的目录。但是为什么linux用,只要用gcc生成.o文件后再用arcrvlibx... 我以前是一直用WINDOWS里面的VS010或者2012的,他寻找头文件是要设置头文件.h的目录。
但是为什么linux用,只要用gcc生成.o文件后再用ar crv libxxx生成libxxx.a文件后,直接就可以在主函数文件里面包含那个xxx.h就可以使用libxxx.a里面的函数了,为什么不用指定xxx.h的路径。到底在哪一步告诉了gcc xxx.h就在那个地方真的不知道谁可以告诉我?!我曾经看过一篇文章是关于这个就是不记得了。

还有如果我想那个生成.a的文件的.c文件里面包含头文件应该怎样办好?就是用那个头文件有两个作用,对于库来说声明结构变量,对于主函数.c文件来说声明函数。
展开
 我来答
silmerusse
2014-01-10 · TA获得超过6640个赞
知道大有可为答主
回答量:2919
采纳率:33%
帮助的人:2108万
展开全部
用-I选项指定include目录就行,没有找不到的,除非你写错了。
vc的编译器cl是用/I选项,差不多的
你用visio studio大概都只使用图形界面的,其实底下都是命令行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CN__暗夜幽灵
2014-01-10 · TA获得超过354个赞
知道小有建树答主
回答量:529
采纳率:71%
帮助的人:236万
展开全部
环境变量
gcc网上找的
vs的是由IDE(右键点工程->属性,里面有像“C/C++,链接,link”等字样的选项)和环境变量共同(右击"我的电脑"->"属性"里能看到")决定的

一、头文件

gcc 在编译时寻找所需要的头文件 :

※搜寻会从-I开始

※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
(这些变量在windows下对应的是include环境变量)

※再找内定目录

/usr/include

/usr/local/include

/usr/lib/gcc-lib/i386-linux/2.95.2/include

/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3

/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include

库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是

/usr/include

prefix/include

prefix/xxx-xxx-xxx-gnulibc/include

prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include

二、库文件

编译的时候:

※gcc会去找-L

※再找gcc的环境变量LIBRARY_PATH

※再找内定目录 /lib:/usr/lib: /usr/local/lib:这是当初compile gcc时写在程序内的

三、运行时动态库的搜索路径

1、在配置文件/etc/ld.so.conf中指定动态库搜索路径

2、通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)(HP-
UX对应的是SHLIB_PATH环境变量,AIX对应的是LIBPATH环境变量,windows对应的是lib环境变量)

3、在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。

这是通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间用冒号":"分隔

4、默认的动态库搜索路径/lib /usr/lib

可以通过执行可执行文件pos得到的结果不同获知其搜索到了哪个动态库,从而获得第1个动态库搜索顺序,然后删除该动态库,

再执行程序pos,获得第2个动态库搜索路径,再删除第2个被搜索到的动态库,

如此往复,将可得到Linux搜索动态库的先后顺序。

程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示

程序pos输出结果 使用的动态库 对应的动态库搜索路径指定方式

./ ./libpos.so 编译目标代码时指定的动态库搜索路径

/root/test/env/lib /root/test/env/lib/libpos.so
环境变量LD_LIBRARY_PATH指定的动态库搜索路径

/root/test/conf/lib /root/test/conf/lib/libpos.so
配置文件/etc/ld.so.conf中指定的动态库搜索路径

/lib /lib/libpos.so 默认的动态库搜索路径/lib

/usr/lib /usr/lib/libpos.so 默认的动态库搜索路径/usr/lib

动态库的搜索路径搜索的先后顺序是:

1.编译目标代码时指定的动态库搜索路径;

2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;

3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;

4.默认的动态库搜索路径/lib /usr/lib。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunnyhouyq
2014-01-10 · TA获得超过649个赞
知道小有建树答主
回答量:515
采纳率:100%
帮助的人:523万
展开全部
自定义头文件如果在当前编译目录会自动搜索到,如果不在当前目录也不再系统目录,需要-I选项指定头文件所在目录
更多追问追答
追问
可是不知道为什么我在编译我自己的库是打算用到一个头文件(那个头文件本来是用来声明结构变量的),可是它不会自动搜索,最后只能都写在库的.c文件中
追答
gcc -g -c a.c -I"/dir/include"
ar rv liba.a a.o
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-10
展开全部
gcc生成.o文件的过程就是一个链接的过程,你链接之后,当然可以直接用了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式