gcc装载具体库的的方法总结

原创文章,转载请注明出处.转载自: Li Haifeng's Blog
本文链接地址: gcc装载具体库的的方法总结

注:该总结主要来自:bugfly z的buzz.感谢bugfly z,以及回帖的盆友,如果有不完善的地方,欢迎拍砖。


1.环境变量LD_PRELOAD


LD_PRELOAD 后面接的是具体的库文件全路径,可以接多个


参考:http://blog.csdn.net/haoel/archive/2007/05/09/1602108.aspx


2.是方案1的变体。直接把库名加到列表加到/etc/ld.so.preload. 该方法会影响到系统里所有应用。


程序加载时,LD_PRELOAD加载路径优先级高于/etc/ld.so.preload


3. 环境变量LD_LIBRARY_PATH


LD_LIBRARY_PATH指定查找路径,这个路径优先级别高于系统预设的路径


假如现在需要在已有的环境变量上添加新的路径名,则采用如下方式:


LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH.(newdirs是新的路径串)


4. gcc 中的 -L 和 -l参数  -Wl参数


放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时另外一个参数-L就派上用场了,比如常用的X11的库,它在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。


-Wl,表示后面的参数将传给link程序ld

5.LD程序硬编码了一些库搜索路径

查看方法:


00653000-0066e000 r-xp 00000000 08:07 1320479 /lib/ld-2.11.1.so


0066e000-0066f000 r–p 0001a000 08:07 1320479 /lib/ld-2.11.1.so


0066f000-00670000 rw-p 0001b000 08:07 1320479 /lib/ld-2.11.1.so


$ strings /lib/ld-2.11.1.so | grep lib



display library search paths


/lib/


/usr/lib/


/lib/i486-linux-gnu/


/usr/lib/i486-linux-gnu/



上面就是默认的装载路径, 直接在装载器里hardcode,


5.ldconfig也可以起到作用

ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc /ld.so.cache,此文件保存已排好序的动态链接库名字列表.


运行ldconfig -v 可以看到所有的系统加载库

---------------

From Li Haifeng's Blog, post gcc装载具体库的的方法总结

Post Footer automatically generated by wp-posturl plugin for wordpress.

分享到: