用arm-linux交叉编译器使用动态库时搜索标准路径是什么?

1. 链接和运行时库文件搜索路径到设置        库文件在链接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。通常 Linux 系统把 /lib 和 /usr/lib 两个目录做为默认的库搜索路径,因此使用这两个目录中的库时不须要进行设置搜索路径便可直接使用。对于处于默认库搜索路径以外的库,须要将库的位置添加到 库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:

            须要注意的是:这种搜索路径的设置方式对于程序链接时的库(包括共享库和静态库)的定位已经足够了,可是对于使用了共享库的程序的执行仍是不够的。这是因 为为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,因此是直接读取库列表文件

,简单的说,它的做用就是将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache 以供使用。所以当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增长新的库路径后,须要运行一下 /sbin/ldconfig使全部的库文件都被缓存到ld.so.cache中,若是没作,即便库文件明明就在/usr/lib下的,也是不会被使用 的,结果编译过程当中抱错,缺乏xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。

            在程序链接时,对于库文件(静态库和共享库)的搜索路径,除了上面的设置方式以外,还能够经过 -L 参数显式指定。由于用 -L 设置的路径将被优先搜索,因此在链接的时候一般都会以这种方式直接指定要链接的库的路径。

版本的改变,这有时会给应用程序带来兼容性的问题,形成某些程序运行不正常。为了不出现上面的这些状况,在 GTK+ 及其依赖库的安装过程当中对于库的搜索路径的设置将采用另外一种方式进行。这种设置方式不须要 root 权限,设置也简单。

2.交叉编译时候如何配置链接库的搜索路径

        交叉编译的时候不能使用本地(i686机器,即PC机器,研发机器)机器上的库,可是在作编译连接的时候默认的是使用本地库,即/usr/lib, /lib两个目录。所以,在交叉编译的时候,要采起一些方法使得在编译连接的时候找到须要的库。

        首先,要知道:编译的时候只须要头文档,真正实际的库文档在连接的时候用到。 (这是个人理解,假若有不对的地方,敬请网上各位大侠指教) 而后,讲讲如何在交叉编译连接的时候找到须要的库。

    (1)交叉编译时候直接使用-L和-I参数指定搜索非标准的库文档和头文档的路径。例如:

)。一般状况下推荐仍是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,而且该库的路径信息保存在可执行文件中,运行时它会直接到该路 径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。

Linux下动态库使用小结

1. 静态库和动态库的基本概念
        静态库,是在可执行程序链接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里均可以用,可是生 成的可执行文件较大。动态库,是在可执行程序启动时加载到执行程序中,能够被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时须要库 文件支持,若是机器里没有这些库文件就不能运行。

bad》)。一般状况下推荐仍是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,而且该库的路径信息保存在可执行文件中,运行时它会直 接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。

我要回帖

更多关于 arm编译 的文章

 

随机推荐