LinuxSir.cn,穿越时空的Linuxsir!

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

请帮忙看下uclibc工具链的问题

[复制链接]
发表于 2008-10-15 18:50:35 | 显示全部楼层 |阅读模式
版本:
  tar jxf gcc-3.4.6.tar.bz2
  tar jxf binutils-2.18.tar.bz2
  tar jxf uClibc-0.9.28.tar.bz2
编译过程:
  cd /data/binutils-2.18/
  ./configure --target=i686-linux --prefix=/opt/i686 --disable-nls
  make && make install && echo "succ----"
   cd /data/gcc-3.4.6/
  export PATH=/opt/i686/binPATH
    ./configure --target=i686-linux --prefix=/opt/i686 --disable-nls --enable-languages=c --without-headers --with-newlib
    make && make install && echo "succ----"
编译uclibc,略
    mkdir /data/gcc-final
    cd /data/gcc-final/
    tar jxf /data/gcc-3.4.6.tar.bz2
    cd /data/gcc-final/gcc-3.4.6/
    ./configure --target=i686-linux --prefix=/opt/i686 --disable-nls --enable-languages=c --disable-__cxa_atexit
    make && make install && echo "succ----"



工具链测试:
[root@server /opt/i6863]# i686-linux-gcc hello.c -o hello -v
Reading specs from /opt/i6863/lib/gcc/i686-linux/3.4.6/specs
Configured with: ./configure --target=i686-linux --prefix=/opt/i6863 --enable-languages=c --disable-__cxa_atexit --disable-nls
Thread model: posix
gcc version 3.4.6
/opt/i6863/libexec/gcc/i686-linux/3.4.6/cc1 -quiet -v hello.c -quiet -dumpbase hello.c -mtune=pentiumpro -auxbase hello -version -o /tmp/cckW7LMM.s
ignoring nonexistent directory "/opt/i6863/lib/gcc/i686-linux/3.4.6/../../../../i686-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/opt/i6863/include
/opt/i6863/lib/gcc/i686-linux/3.4.6/include
/usr/include
End of search list.
GNU C version 3.4.6 (i686-linux)
        compiled by GNU C version 3.2.2 20030222 (Red Hat Linux 3.2.2-5).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64003
/opt/i6863/lib/gcc/i686-linux/3.4.6/../../../../i686-linux/bin/as -V -Qy -o /tmp/ccAHJncu.o /tmp/cckW7LMM.s
GNU assembler version 2.18 (i686-linux) using BFD version (GNU Binutils) 2.18
/opt/i6863/libexec/gcc/i686-linux/3.4.6/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o hello /opt/i6863/lib/gcc/i686-linux/3.4.6/../../../crt1.o /opt/i6863/lib/gcc/i686-linux/3.4.6/../../../crti.o /opt/i6863/lib/gcc/i686-linux/3.4.6/crtbegin.o -L/opt/i6863/lib/gcc/i686-linux/3.4.6 -L/opt/i6863/lib/gcc/i686-linux/3.4.6/../../../../i686-linux/lib -L/opt/i6863/lib/gcc/i686-linux/3.4.6/../../.. /tmp/ccAHJncu.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /opt/i6863/lib/gcc/i686-linux/3.4.6/crtend.o /opt/i6863/lib/gcc/i686-linux/3.4.6/../../../crtn.o
[root@server /opt/i6863]# ls /opt/i6863/i686-linux/

问题1, 上面的链接过程中搜寻头文件有2个多于的" /usr/local/include" 和 " /usr/include" , 怎样去掉呢?
问题2, 链接过程中-dynamic-linker /lib/ld-linux.so.2这个好像不正确, 该怎么修改呢

谢谢
 楼主| 发表于 2008-10-15 19:32:43 | 显示全部楼层
问题2解决: 该下specs即可
问题1还未解决, 现在头文件搜索顺序是:
/usr/local/include
/opt/i6863/include
/opt/i6863/lib/gcc/i686-linux/3.4.6/include
/usr/include

怎么把我/usr/local/include放到后面去?
回复 支持 反对

使用道具 举报

发表于 2008-10-15 21:22:54 | 显示全部楼层
工具链请参考
http://www.linuxfromscratch.org/hlfs/view/unstable/

如果结合一下 CLFS-Sysroot 使用 --sysroot 会更简单一些,那样就不需要调整spec。
没具体做过uclibc的工具链,这个仅供参考。

调整头文件搜索顺序,可在gcc命令行添加-nostdinc -isystem /yourpath1 -isystem /yourpath2 -isystem /yourpath3 ...

楼主是不是在做 GNU/JINIX?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-15 23:10:28 | 显示全部楼层
多谢深空老大:)
gcc -I这个也可以, 但是编译象busybox的时候如果用的本地的include有时会出现错误,
lfs中gcc4有个禁止本地include目录的patch:
./gcc-3.4.6/gcc/config/linux.h最后面加上
    #undef STANDARD_INCLUDE_DIR
    #define STANDARD_INCLUDE_DIR 0
正在测试这个,稍后会贴出结果

jinix 在6月份之后就没怎么写了,一个人实在坚持不下来,正在把kernel改成linux-2.6了,
可能以后还会继续做吧。
鼠头蛇尾的,瀑布汗
回复 支持 反对

使用道具 举报

发表于 2008-10-16 11:21:26 | 显示全部楼层
gcc有个-nostdinc选项,指定了就不会搜索任何系统目录了。 这时候只要把需要搜索的目录,按照希望的顺序,一个个用-I来指定即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-16 11:37:16 | 显示全部楼层
thanks,
还是这个问题, 下面两种都可以解决:
(1)export C_INCLUDE_PATH=/opt/i686/include
(2)CFLAGS = -nostdinc -I/opt/i686/include , 这个每次都要改makefile

因为是做toolchain, 所以希望是个完整简单的环境:
希望的是在specs中改,  尝试了:
%{I*}
改成
%{I*:-I/opt/i686/include -I%*}

gcc hello.c -v
还是不行?
回复 支持 反对

使用道具 举报

发表于 2008-10-16 12:03:17 | 显示全部楼层
jinix是楼主制做的下一代操作系统?牛!
我现在想做个Linux内核的中文版配置菜单,但是搞不清楚make menuconfig的东西是怎么出来的,楼主能指导一下吗?
回复 支持 反对

使用道具 举报

发表于 2008-10-16 21:44:38 | 显示全部楼层
Post by jinglexy;1894487
多谢深空老大:)
gcc -I这个也可以, 但是编译象busybox的时候如果用的本地的include有时会出现错误,
lfs中gcc4有个禁止本地include目录的patch:
./gcc-3.4.6/gcc/config/linux.h最后面加上
    #undef STANDARD_INCLUDE_DIR
    #define STANDARD_INCLUDE_DIR 0
正在测试这个,稍后会贴出结果

jinix 在6月份之后就没怎么写了,一个人实在坚持不下来,正在把kernel改成linux-2.6了,
可能以后还会继续做吧。
鼠头蛇尾的,瀑布汗

有人叫老大,挺不适应的哈。
-I参数和我上面提到的方式有区别的,具体请参考man gcc。

建议还是参考上面提到的 HLFS 文档构建工具链,或参考其他人的工具链构建脚本做。

有时间会研究研究您的 jinix。
回复 支持 反对

使用道具 举报

发表于 2008-10-16 21:49:54 | 显示全部楼层
Post by jinglexy;1894624
thanks,
还是这个问题, 下面两种都可以解决:
(1)export C_INCLUDE_PATH=/opt/i686/include
(2)CFLAGS = -nostdinc -I/opt/i686/include , 这个每次都要改makefile

因为是做toolchain, 所以希望是个完整简单的环境:
希望的是在specs中改,  尝试了:
%{I*}
改成
%{I*:-I/opt/i686/include -I%*}

gcc hello.c -v
还是不行?

如果使用添加参数方式,最好的方式是重新定义CC="xxx-gcc -nostdinc -isystem ... -I...",CXX使用类似形式定义,或利用alias建立xxx-gcc xxx-g++别名。
回复 支持 反对

使用道具 举报

发表于 2008-10-18 21:43:05 | 显示全部楼层
Jinux?
回复 支持 反对

使用道具 举报

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

本版积分规则

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