LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 10662|回复: 219

请教几个小问题

[复制链接]
发表于 2008-10-22 15:29:15 | 显示全部楼层 |阅读模式
在LFS的过程中,为了验证自己的一些想法,请教几个弱弱的问题:
1.能否列出使用指令的完整路径?
2.在make install完成后,如何查看make install安装了哪些程序?譬如说make 、make install完成后,如何查看在哪些位置安装了哪些程序?
发表于 2008-10-22 16:00:17 | 显示全部楼层
1、看不懂你的意思。。。。
是不是比如
ls -l
你想看看ls这个指令的完整路径在哪里?
那么
whereis ls
就可以找到。

2、在make install 的时候使用:

make install | tee temp

在temp中就会有install时候的详细信息,那么你就可以了解到底安装了哪些目录和文件。
如果你想直观点,那么把temp改名,比如安装gcc的时候就改为

make install | tee gcc4-1-2.install

这样就可以自己看了。当然看Makefile也能看出装了哪些东西,如果你对Makefile很了解的话。
LFS手册中,也提到了安装哪些东西,都是比较准确的。

不过我也不清楚是不是还有更好的方法看到安装了哪些东西。

提示:有的软件支持卸载,命令为

make uninstall

但是也不是所有的都可以这么做的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-22 16:16:34 | 显示全部楼层
Post by ti8er;1897530
1、看不懂你的意思。。。。
是不是比如
ls -l
你想看看ls这个指令的完整路径在哪里?
那么
whereis ls
就可以找到。

2、在make install 的时候使用:

make install | tee temp

在temp中就会有install时候的详细信息,那么你就可以了解到底安装了哪些目录和文件。
如果你想直观点,那么把temp改名,比如安装gcc的时候就改为

make install | tee gcc4-1-2.install

这样就可以自己看了。当然看Makefile也能看出装了哪些东西,如果你对Makefile很了解的话。
LFS手册中,也提到了安装哪些东西,都是比较准确的。

不过我也不清楚是不是还有更好的方法看到安装了哪些东西。

提示:有的软件支持卸载,命令为

make uninstall

但是也不是所有的都可以这么做的。


不好意思,第一个问题表述的不清楚,语文功底太差,呵呵~~
whereis这个指令能满足我的需求,我的本意是想在执行ls -l等指令的时候,在显示执行结果的同时显示使用的ls指令的绝对地址。

第二个问题是我在编译binutils时,在binutils-build目录有这样两个文件夹:ld和binutils,里面有make后生成的诸如ld-new、ar等工具,所以就想知道咱make install的过程中具体安装了哪些程序。特别的是ld-new安装到/tools/bin目录下为ld,我也想看看这个重命名的该过程。至于具体的安装位置,虽然configure是已经指定了--prefix=/tools,但是这些工具最后安装的位置可能是bin也可能是sbin目录,库的安装就更如此了,所以就很香知道具体的安装位置。

至于make uninsatll,在LFS过程中用的那些工具,好像都没有提供make uninstall
回复 支持 反对

使用道具 举报

发表于 2008-10-22 16:24:52 | 显示全部楼层
要显示绝对地址可能要脚本才行了。其实你
echo $PATH

就可以知道应用程序访问的先后路径。

whereis gcc
就可以知道gcc是用了哪里的了。这点在你系统有2个gcc的时候比较有用。

安装哪些文件和哪些库,用我说到的指令,在生成的文件里全部都有列出来的。只是信息很多,可能比较难看而已。
如果你真想明白,那么你需要去学习一下Makefile的知识。我目前正在学习。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-22 16:31:10 | 显示全部楼层
根据手册上说的,在构建工具链过程中,最重要的是要确保两点:
1.ld的库文件搜索路径。在binutils第一遍时先使用的是宿主中的库文件,make后安装到/tools目录,然后通过LIB-PATH来指定库的搜索路径,编译出在/tools目录先安装好glibc后使用的ld,在binutils第二遍时类似的过程。
2.gcc使用的是哪个dynamic linker。在手册里主要是通过在`dirname $(gcc -print-libgcc-file-name)`放置修改过的specs文件来实现的。
现在我想具体的看下每做完一步后相应的变化是什么。

还有gcc自身带有一个叫做libgcc的库,这个库又有什么作用的呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-22 16:34:52 | 显示全部楼层
Post by ti8er;1897545

安装哪些文件和哪些库,用我说到的指令,在生成的文件里全部都有列出来的。只是信息很多,可能比较难看而已。
如果你真想明白,那么你需要去学习一下Makefile的知识。我目前正在学习。

在弄完LFS中的大部分问题再朝那个方向努力,要学的东西太多了,有点忙不过来了。呵呵~~
回复 支持 反对

使用道具 举报

发表于 2008-10-22 16:43:33 | 显示全部楼层
工具链调整是很关键的。所以要确保使用了正确的ld和gcc

所以,在第5章,一定要确保PATH中
/tools/bin这个目录必须排在第一个,以强制系统首先使用正确的ld和gcc。

然后,如何确保ld指向了正确的库?LFS手册已经教你怎么做了,看第5.7章,他用gcc编译了一个新的测试文件,然后用realelf来查看使用的库是不是正确的库。
如果不是的话,那就要重新调整了。
回复 支持 反对

使用道具 举报

发表于 2008-10-22 16:46:07 | 显示全部楼层
第二个,以前有个 paco 可以跟踪,或者 make install 的时候加上 DESTDIR=xxx 这个参数,就可以装到xxx目录去,而不是猿类定的 prefix 中。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-22 16:50:56 | 显示全部楼层
手册中说的我基本上明白,现在正在具体的看看每一步都是怎么变化的,呵呵~~

对于那个动态链接器,还有个就是它连接的库的问题。/etc/ld.so.conf这个文件只是在5.6中Glibc的编译过程中为了解决一个无关紧要的warning而生成的,这个文件决定着编译时使用的动态链接库,为什么在这里没有重视?
The install stage of Glibc will issue a harmless warning at the end about the absence of /tools/etc/ld.so.conf. Prevent this warning with:

mkdir -v /tools/etc
touch /tools/etc/ld.so.conf
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-22 16:53:38 | 显示全部楼层
Post by ti8er;1897556
工具链调整是很关键的。所以要确保使用了正确的ld和gcc

所以,在第5章,一定要确保PATH中
/tools/bin这个目录必须排在第一个,以强制系统首先使用正确的ld和gcc。


在做的过程中我一直按照你前面说的,时刻关注PATH的值,这上面应该不会出错。呵呵~~
回复 支持 反对

使用道具 举报

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

本版积分规则

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