LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: Skymoon

关于库的深入思考[探讨原创]

[复制链接]
发表于 2007-11-9 10:12:24 | 显示全部楼层
我们发现原来的输出中原来的say.so已经变成了./say.so.运行一下./test2,可以运行了!好,找到库了,这里用的相对路径,无疑,我们将say.so移动到非当前文件夹.那test就又不能运行了.这样无疑是把我们用到的库硬编码进了程序里.我不喜欢硬编码,太死板.那不硬编码系统怎么找到我们需要的文件呢.
在程序没有把库地址硬编码经进去的前提下,系统会寻找LD_LIBRARY_PATH环境变量中的地址.
LD_LIBRARY_PATH=./ ./test2
如我们所愿,程序正常运行.
如果系统在这一步也没发现我们需要的库呢.




这里面的命令LD_LIBRARY_PATH=./ ./test2
应该是LD_LIBRARY_PATH=./ ./test吧?不知道对不对?
回复 支持 反对

使用道具 举报

发表于 2008-1-27 15:43:56 | 显示全部楼层
看得晕晕的,明天再继续看,现在进行GCC的pass2 make.
回复 支持 反对

使用道具 举报

发表于 2008-2-28 20:03:05 | 显示全部楼层
再补充一点重要的信息:

libc-so.6的搜索路径在编译GLibc的时候可以通过

echo "slibdir=/tools/mylib">>configparms
设置。

在Multilib的时候,这一点至关重要哦
回复 支持 反对

使用道具 举报

发表于 2008-3-1 04:12:30 | 显示全部楼层
-fpic/-fPIC的作用确切的说是生成Position Independent Code
其特点是包含PLT和GOT
procedure linkage table
global offset table
调用函数实际调用的是plt里的地址
访问全局变量实际访问的则是got里的地址
这些地址在未运行不需要确定,运行时可以实时解析出来,所以可以被加载到进程地址空间的任何地方,因此有position independent之名
回复 支持 反对

使用道具 举报

发表于 2009-6-9 01:40:46 | 显示全部楼层
感谢分享。
^O&
回复 支持 反对

使用道具 举报

发表于 2010-5-31 22:06:30 | 显示全部楼层
谢谢,写的太好了!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2011-3-15 20:54:40 | 显示全部楼层
还是不明白 fPIC的作用 情大侠指点
回复 支持 反对

使用道具 举报

发表于 2011-4-21 08:29:23 | 显示全部楼层
所谓“曲高和寡”,那么久的帖子才两页的回帖。
总之,受教了,谢。
回复 支持 反对

使用道具 举报

发表于 2011-4-27 14:33:59 | 显示全部楼层
精彩的帖子,可惜只看懂一部分,对fPIC还是不太明白,希望版主写的更通俗易懂些,让我们这些新手更容易理解
回复 支持 反对

使用道具 举报

发表于 2011-4-27 17:18:37 | 显示全部楼层
刚看了一些相关性的文档,懒的翻译,关于 -fPIC的:

There are two things we must do differently from the static library case. Firstly, we must
generate all library code as position independent code (PIC). This makes it possible to link the
library at any process address and the code will still work correctly. Since we don't know
beforehand at which position each dynamic library will be linked, we cannot use absolute
addresses (which are used with static library linking).
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表