在项目中经常会 移植各种开源库,编译好以后会生出相应的库文件,包括动态库和静态库,如果在编译的过程中没有用--prefix参数指定编译生成文件的路径,库文件会默认指定到/usr/local/lib目录下,要使用的头文件会指定到/usr/local/include目录下。我们都知道,在编译我们自己的程序的时候可以用-L+目录指定库文件链接的目录,用-l+库名指定要链接那个库(如libcurl.so.4.3.0.0,这个库,curl就是库名,用-I+目录指定头文件搜索路径。
但是我们项目开发过程中一般会编译两个平台上的库文件,一个是x86上的,一个是arm上的,在X86上调试成功了,才会交叉编译放到我们的目标板的系统上。这样如果都放在默认位置,使用的时候就会搞混了。所以我们需要把不同平台的库文件放到自己指定的位置,但是这样的话,编程我们的应用时会找不到对应的头文件或者链接的时候会出错。
解决办法就是把这些路径添加到配置文件中去
针对于动态库文件:一般 linux 系统把 /lib 和 /usr/lib /usr/local目录作为默认的库搜索路径,对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中,设置库文件的搜索路径有下列两种方式,可任选其一使用,现以移植libcurl为例来说明:
1.在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径,export LD_LIBRARY_PATH=/usr/local/json-c-0.9forarm/lib:$LD_LIBRARY_PATH
2.在 /etc/ld.so.conf 文件中添加库的搜索路径,将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择,加方法也极其简单,将库文件的绝对路径直接写进去就OK了。在运行一下/sbin/ldconfig,这个在每次更新这个文件后都必须运行一下。
针对于头文件:一般 linux 系统把 /usr/include 和 /usr/local/include 两个目录作为默认的库搜索路径,头文件搜索的顺序如下,
(1)在gcc编译源文件的时候,通过参数-I指定头文件的搜索路径,如果指定路径有多个路径时,则按照指定路径的顺序搜索头文件。命令形 式如:“gcc -I /path/where/theheadfile/in sourcefile.c“,这里源文件的路径可以是绝对路径,也可以是相对路径
(2)通过查找gcc的环境变量C_INCLUDE_PATH/CPLUS_INCLUDE_PATH/OBJC_INCLUDE_PATH来搜索头文件位置
(3)再找内定目录搜索。当#include使用相对路径的时候,gcc最终会根据上面这些路径,来最终构建出头文件的位置