当我有一个自定义的ld- <me> .so.conf </me>时,ldconfig还包括默认路径中的库

时间:2013-10-29 11:50:20

标签: linux linker

我有交叉编译的库和linux加载器。 我在/ etc下放置了一个自定义的ld-.so.conf,conf文件有一个包含所有交叉编译库和加载器的路径。

但是当我运行ldconfig时,

ldconfig -C /etc/ld-.so.cache -f /etc/ld-.so.conf

所有系统库及其路径都存在于缓存文件中。 我需要生成的缓存文件只包含我的交叉编译库。

ldconfig操作的结果如下:

  

strace / opt / me / ldconfig -C /etc/ld-me.so.cache -f /etc/ld-me.so.conf   execve(“/ opt / me / ldconfig”,[“/ opt / me / ldc”...,“ - C”,   “/etc/ld-me.so.cache”,“ - f”,“/ etc /ld-me.so.conf”],[/ * 38 vars * /])=   0

     

uname({sys =“Linux”,node =“ip-172-31-32-236”,...})= 0 brk(0)
  = 0x10c1000 brk(0x10c2180)= 0x10c2180 arch_prctl(ARCH_SET_FS,0x10c1860)= 0 brk(0x10e3180)
  = 0x10e3180 brk(0x10e4000)= 0x10e4000 open(“/ usr / lib / locale / locale-archive”,O_RDONLY)= 3 fstat(3,   {st_mode = S_IFREG | 0644,st_size = 99154480,...})= 0 mmap(NULL,   99154480,PROT_READ,MAP_PRIVATE,3,0)= 0x7f46155a4000 close(3)
  = 0 open(“/ etc / ld-me.so.conf”,O_RDONLY)= 3 fstat(3,{st_mode = S_IFREG | 0640,st_size = 25,...})= 0 mmap(NULL,4096,   PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS,-1,0)=   0x7f46155a3000读取(3,“/ opt / me / lib \ n”,4096)= 25 stat(“/ opt / me / lib”,   {st_mode = S_IFDIR | 0750,st_size = 4096,...})= 0读取(3,“”,4096)
  = 0 close(3)= 0 munmap(0x7f46155a3000,4096)= 0 stat(“/ lib”,{st_mode = S_IFDIR | 0555,st_size = 4096,   ...})= 0 stat(“/ lib64”,{st_mode = S_IFDIR | 0555,st_size = 12288,...})=   0 stat(“/ usr / lib”,{st_mode = S_IFDIR | 0555,st_size = 4096,...})= 0   stat(“/ usr / lib64”,{st_mode = S_IFDIR | 0555,st_size = 12288,...})= 0   open(“/ opt / me / lib”,O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC)= 3

有人可以告诉我为什么要添加系统库吗?

1 个答案:

答案 0 :(得分:0)

因为这是ldconfig的定义行为:

  

ldconfig创建必要的链接和缓存   最近的共享库在指定的目录中找到   命令行,在文件/etc/ld.so.conf中,和受信任的   目录(/ lib和/ usr / lib)。缓存由运行时使用   linker,ld.so或ld-linux.so。 ldconfig检查标头和   它遇到的库的文件名          确定哪些版本的链接应更新。

可信目录列表可能是在我编写的'cut'n'pasted的手册页之后的某个时间用lib64 dirs更新的。

您可以根据带有符号链接的conf文件创建目录结构,或者绑定指向真实目录的挂载然后使用 -r目录,根据系统目录的空版本进行ldconfig构建。