gcc库⽂件和头⽂件搜索路径
⼀、compile-time库⽂件搜索路径
1.如果编译时指定了-L选项,就优先到-L指定的路径去查库进⾏连接;
2.查GCC的环境变量LIBRARY_PATH
3.到/bin /usr/lib /usr/local/lib去查。这⼏个搜索路径在gcc下是默认的。
所以当我们要让⾃⼰添加的库⽂件让gcc能搜索到,有两种⽅法,⼀种就是⽤-L指定,⼀种就是将库复制到以上⼏个gcc默认搜索路径。
⼆、run-time库搜索路径
1.编译时⽤-Wl, -rpath指定的路径
Ex:
arm-none-linux-gnueabi-gcc -o helloword_arm helloword.c -Wl,-dynamic-linker=/system/lib/ld-linux.so.3,-rpath,/system/lib/
2.环境变量LD_LIBRARY_PATH指定的路径
3./etc/f指定的路径
4.默认的动态搜索库路径/lib /usr/lib
LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,⼆者的含义和作⽤分别如下:
LIBRARY_PATH环境变量⽤于在程序编译期间查动态链接库时指定查共享库的路径,例如,指定gcc编译需要⽤到的动态链接库的⽬录。设置⽅法如下(其中,LIBDIR1和LIBDIR2为两个库⽬录):
export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATHsystem的头文件
LD_LIBRARY_PATH环境变量⽤于在程序加载运⾏期间查动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH 中指定的路径会在系统默认路径之前进⾏查。设置⽅法如下(其中,LIBDIR1和LIBDIR2为两个库⽬录):
export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH
举个例⼦,我们开发⼀个程序,经常会需要使⽤某个或某些动态链接库,为了保证程序的可移植性,可
以先将这些编译好的动态链接库放在⾃⼰指定的⽬录下,然后按照上述⽅式将这些⽬录加⼊到LD_LIBRARY_PATH环境变量中,这样⾃⼰的程序就可以动态链接后加载库⽂件运⾏了。
区别与使⽤:
开发时,设置LIBRARY_PATH,以便gcc能够到编译时需要的动态链接库。
发布时,设置LD_LIBRARY_PATH,以便程序加载运⾏时能够⾃动到需要的动态链接库。
三、⼏个重要的命令
1)ldd bin_name
可以查看编译出来的可执⾏⽂件依赖的库。部署程序时,我们要把这些库拷贝出来,然后将这些库连同可执⾏⽂件拷贝到新的机器上,
在/etc/f.d下添加对应的库⽂件搜索路径即可。
2.ldconfig命令
搜索/lib和/usr/lib以及/etc/f下列出来的所有路径的库,然后创建动态库的cache⽂件。当程序需
要搜索库时就会搜索ld.so.cache⾥列
出来的库。
所以当我们向系统添加新的库⽂件时,除了需要把库⽂件烤到/usr/local/lib等指定位置外,还需ldconfig⼀下来更新cache⽂件。
四、gcc头⽂件的搜索路径
1.优先搜索-I指定的路径
2.查GCC的环境变量C_INCLUDE_PATH/CPLUS_INCLUDE_PATH/OBJC_INCLUDE_PATH指定的路径
3.查默认的搜索路径/usr/include /usr/local/include
所有GCC的环境变量,我们都可以GCC的原有搜索路径上上⾯添加进我们⾃⼰的路径,例如
#增加.so搜索路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home//lib
#增加.a搜索路径
LIBRARY_PATH=$LIBRARY_PATH:/home/lib
#增加bin搜索路径
export PATH=$PATH:/home/bin
#增加GCC的include⽂件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/include
-wall -pedantic
-wall编译时显⽰所有的警告信息,可以增加程序的健壮性和可移植性
-pedantic,以符合ANSI/ISO C 标准列出所有警告
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论