+ -
当前位置:首页 → 问答吧 → 请帮忙看下uclibc工具链的问题

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

时间:2008-10-15

来源:互联网

版本:
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/bin:$PATH
./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这个好像不正确, 该怎么修改呢

谢谢

作者: jinglexy   发布时间: 2008-10-15

问题2解决: 该下specs即可
问题1还未解决, 现在头文件搜索顺序是:
/usr/local/include
/opt/i6863/include
/opt/i6863/lib/gcc/i686-linux/3.4.6/include
/usr/include

怎么把我/usr/local/include放到后面去?

作者: jinglexy   发布时间: 2008-10-15

工具链请参考
http://www.linuxfromscratch.org/hlfs/view/unstable/

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

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

楼主是不是在做 GNU/JINIX?

作者: 聚焦深空   发布时间: 2008-10-16

多谢深空老大:)
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了,
可能以后还会继续做吧。
鼠头蛇尾的,瀑布汗

作者: jinglexy   发布时间: 2008-10-16

gcc有个-nostdinc选项,指定了就不会搜索任何系统目录了。 这时候只要把需要搜索的目录,按照希望的顺序,一个个用-I来指定即可

作者: albcamus   发布时间: 2008-10-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
还是不行?

作者: jinglexy   发布时间: 2008-10-16

jinix是楼主制做的下一代操作系统?牛!
我现在想做个Linux内核的中文版配置菜单,但是搞不清楚make menuconfig的东西是怎么出来的,楼主能指导一下吗?

作者: ti8er   发布时间: 2008-10-16

引用:
作者: jinglexy
多谢深空老大:)
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-17

引用:
作者: jinglexy
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-17

Jinux?

作者: youbest   发布时间: 2008-10-19

re ti8er:
menuconfig是./linux-2.x.x/scripts目录中的程序实现的, 只是用过, 没看过; 网上有个menuconfig各个条目的翻译, 看这个就可以了, 没必要做成中文啊

re 聚焦深空:
gcc-3.4.6/gcc/c-incpath.c的add_standard_paths()可以强行过滤这2个目录,
不过去和不去也没什么关系, 测试busybox编译都没问题

re youbest:
jinix1: hobby os,
jinix2: 仿照linux的c++内核, 调度, 文件系统, 内存管理, 体系架构, 驱动架构等基本上完成,
已经停止.
jinix3: linux的轻量级发行版,采用linux-2.6.27,busybox-1.10.0,uclibc-0.9.29等等,用来学习os用的,http://jinix.sf.net

谢谢各位

作者: jinglexy   发布时间: 2008-10-20

谢谢了,我已经找到地方了。我已经把一些菜单都汉化了。不过确实没什么用,只是好玩哈哈。

作者: ti8er   发布时间: 2008-10-20