我有交叉编译的库和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
有人可以告诉我为什么要添加系统库吗?
答案 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构建。