上回说到发现了一个神奇的项目LFS,从官网上可以看到,这个项目是教你怎么完全用源码编译一个自已定制化的Linux系统.这跟我们之前说的安装运行多个Glibc有什么联系呢? 来来来,前情提要,上篇 讲到在程序运行的时候会依赖很多动态库,其中Glibc就是一个非常重要的库,程序通过加载ld-linux.so库对这些依赖库的路径进行查找.而ld-linux.so的路径是写死在编译器gcc中的,换一句话说,就是在一个程序在编译的时候,默认情况下它需要加载的ld-linux.so路径已经写死了(这里编译Glibc的时候会生成对应版本的ld-linux.so文件的,所以不同版本的Glibc会生成版本的ld-linux.so哦). 所以需要运行多个版本的Glibc,有两个方法,一个是在编译新的程序时通过-Wl,–dynamic-linker= 参数指定ld-linux.so路径指向其它版本 ,第二是修改gcc源码中ld-linux.so的路径,再用修改过的gcc编译新的程序,这样编译出来的所有程序ld-linux.so的路径都会指向其它版本生成的了.很容易看出来
Category: LFS
LFS编译gcc出错GCC_NO_EXECUTABLES解决
在公司的开发机自己编译一套环境,读LFS时需要重新编译gcc 公司开发机的gcc版本比较低 4.1.2 按照LFS上说的编译时加参数–target=$LFS_TGT,目的是要让编译出来的可执行文件都带$LFS_TGT的前缀,以跟原来系统中的文件区分 但是在这里编译的时候会有出错 configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES google了好久都没有找到怎么解决,再看configure check出来的信息,build和host的值和刚才target设置的值是不相同的, 是不是这里需要相同呢? 再configure的时候加上 —build=$LFS_TGT –host=$LFS_TGT再编译一下果断可以了,呃..这个真不清楚是啥原因