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文件来说声明函数。 展开
但是为什么linux用,只要用gcc生成.o文件后再用ar crv libxxx生成libxxx.a文件后,直接就可以在主函数文件里面包含那个xxx.h就可以使用libxxx.a里面的函数了,为什么不用指定xxx.h的路径。到底在哪一步告诉了gcc xxx.h就在那个地方真的不知道谁可以告诉我?!我曾经看过一篇文章是关于这个就是不记得了。
还有如果我想那个生成.a的文件的.c文件里面包含头文件应该怎样办好?就是用那个头文件有两个作用,对于库来说声明结构变量,对于主函数.c文件来说声明函数。 展开
4个回答
展开全部
用-I选项指定include目录就行,没有找不到的,除非你写错了。
vc的编译器cl是用/I选项,差不多的
你用visio studio大概都只使用图形界面的,其实底下都是命令行的
vc的编译器cl是用/I选项,差不多的
你用visio studio大概都只使用图形界面的,其实底下都是命令行的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
环境变量
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。
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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自定义头文件如果在当前编译目录会自动搜索到,如果不在当前目录也不再系统目录,需要-I选项指定头文件所在目录
更多追问追答
追问
可是不知道为什么我在编译我自己的库是打算用到一个头文件(那个头文件本来是用来声明结构变量的),可是它不会自动搜索,最后只能都写在库的.c文件中
追答
gcc -g -c a.c -I"/dir/include"
ar rv liba.a a.o
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-10
展开全部
gcc生成.o文件的过程就是一个链接的过程,你链接之后,当然可以直接用了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询