|
|
我们在 LFS 时, chroot 前, 构建 /tools 时, PATH= /tools:/bin:/usr/bin
chroot 后, 从 /tools 构建 /bin 和 /usr/bin 时 , PATH=/bin:/usr/bin:/tools
目的就是为了尽量使用新编译的程序.
但这对 LD_LIBRARY_PATH 没有规定, 特别是 chroot 后.
ldd 一个程序时, 我们可以看见, 除了 ld-linux.so 其他程序都没有决对路径, 可以通过 ld.so 的配置, LD_LIBRARY_PATH 和 /etc/ld.so.conf 改变.
adjust tool chain 实际就是改变编译程序时硬编码的 ld-linux.so 的路径, /tools 里全部是 /tools/lib/ld-linux.so , /usr 里全部是 /lib/ld-linux.so .
我现在遇到的问题就是, chroot 后, 构造到了 gcc ,
如果不设 LD_LIBRARY_PATH, 它似乎只从 /tools/lib 里找 *.so, 所以, /usr/bin 里几个程序无法执行.
LD_LIBRARY_PATH=/lib:/usr/lib:/tools/lib , 这时 /tools 里的程序就会链接到 /lib:/usr/lib 里, 但可能因为我的 /tools 和 /usr 中配置差距较大, 必然 core dump.
LD_LIBRARY_PATH=/tools/lib:/lib:/usr/lib , 这时 就换 /usr/bin 里的程序 core dump 了.
我认为的理想方式就是:
/tools/bin 里的只链接到 /tools/lib
/bin:/usr/bin 里的只链接到 /lib:/usr/lib
我想问大家, chroot 后, 在 /usr/ 里安装了比如 glibc 和 binutils, 这时, ldd 的情况如何, 会不会出现, 比如 /usr/bin/as -> /tools/lib/libc.so 或者 /tools/bin/make -> /lib/libc.so , 这种情况.
如果不是, 那么 ld.so 的相关设置如何? LD_LIBRARY_PATH 和 /etc/ld.so.conf 等的设置.
考虑到这种 ld.so 的动态设置, 以前我的 checkpath 脚本, 应该只需要检查 ld-linux.so 的路径, 没有必要检查其他的 so , 这是我考虑不周的地方. |
|