LinuxSir.cn,穿越时空的Linuxsir!

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

mips-linux交叉编译器使用请教

[复制链接]
发表于 2006-6-2 14:06:49 | 显示全部楼层 |阅读模式
各位同道:
  我费了很大力气,做成了一个 mips-linux 交叉编译器。至少我看编译
    cross ompile 的过程本身没有什么问题。
  但是我用这个cross compile 编译程序的时候却总是不成功:
1,我随便写了个c文件: mm.c
     然后用 我新生成的 cross compile 进行编译:
    /cross/tool-mips/mips3-linux-gcc  mm.c
    但编译的时候出现了问题:
      /cross/tool-mips/lib/gcc/mips3-linux/3.4.4/../../../../mips3-linux/bin/ld: skipping incompatible /lib/libc.so.6 when searching for /lib/libc.so.6
/cross/tool-mips/lib/gcc/mips3-linux/3.4.4/../../../../mips3-linux/bin/ld: cannot find /lib/libc.so.6
collect2: ld returned 1 exit status
   好像 这个 交叉编译器的ld也是从 操作系统的lib文件里找 libc.so.6,而这个文件指向的是主机linux的libc,当然不兼容了。怎样让 ld 到 某个我希望的路径上寻找库文件?

2,上述方法行不通,我就编了一个makefile如下:
LDLIBDIR1=/cross/tool-mips/mips3-linux/lib
LDLIBDIR2=/cross/tool-mips/mips3-mgp32-eb-gnu/lib
LDFLAGS+=-lc -lgcc -lc

mm.o:    mm.c
        /cross/tool-mips/mips3-mgp32-eb-gnu/bin/mips3-linux-gcc  -c mm.c  -o mm.o
all:    mm.o
        /cross/tool-mips/bin/mips3-linux-ld -L$(LDLIBDIR1) -L$(LDLIBDIR2) -elf2fit crti.o crtbegin.o mm.o libc.a  crtend.o $(LDFLAGS)
可编译的时候出下面的错
/cross/tool-mips/mips3-mgp32-eb-gnu/bin/mips3-linux-gcc  -c mm.c  -o mm.o
/cross/tool-mips/bin/mips3-linux-ld -L/cross/tool-mips/mips3-linux/lib -L/cross/tool-mips/mips3-mgp32-eb-gnu/lib -elf2fit crti.o crtbegin.o mm.o libc.a  crtend.o -lc -lgcc -lc
/cross/tool-mips/bin/mips3-linux-ld: crti.o: No such file: 没有那个文件或目录
可是 crti.o趋势就放在 LDLIBDIR1下面啊,怎么还找不到?

3,顺便问一句,链接的时候为什么要用 crti.o crtbegin.o crtend.o
    这些文件?它们究竟是作什么用的?

4,我又用自己的交叉编译器 编译 busybox,但发现出现下面的错误:
/cross/material/busybox-1.1.2/libbb/libbb.a(bb_xgetpwnam.o): In function `bb_xgetpwnam':
bb_pwd.c.text+0x14): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/cross/tool-mips/lib/gcc/mips3-linux/3.4.4/../../../../mips3-linux/bin/ld: warning: cannot find entry symbol __start; defaulting to 00000000100000a0
/cross/tool-mips/mips3-mgp32-eb-gnu/lib/libc.a(printf_fp.o): In function `__printf_fp':
/cross/material/glibc-2.3.5/stdio-common/printf_fp.c:344: undefined reference to `__lttf2'
collect2: ld returned 1 exit status
make[1]: *** [busybox_unstripped] 错误 1
make: *** [_all] 错误 2

这又是怎么回事?感觉好像是交叉编译器没有安装成功
 楼主| 发表于 2006-6-2 14:09:20 | 显示全部楼层

mips-linux 交叉编译器 使用

各位同道:
  我费了很大力气,做成了一个 mips-linux 交叉编译器。至少我看编译
    cross ompile 的过程本身没有什么问题。
  但是我用这个cross compile 编译程序的时候却总是不成功:
1,我随便写了个c文件: mm.c
     然后用 我新生成的 cross compile 进行编译:
    /cross/tool-mips/mips3-linux-gcc  mm.c
    但编译的时候出现了问题:
      /cross/tool-mips/lib/gcc/mips3-linux/3.4.4/../../../../mips3-linux/bin/ld: skipping incompatible /lib/libc.so.6 when searching for /lib/libc.so.6
/cross/tool-mips/lib/gcc/mips3-linux/3.4.4/../../../../mips3-linux/bin/ld: cannot find /lib/libc.so.6
collect2: ld returned 1 exit status
   好像 这个 交叉编译器的ld也是从 操作系统的lib文件里找 libc.so.6,而这个文件指向的是主机linux的libc,当然不兼容了。怎样让 ld 到 某个我希望的路径上寻找库文件?

2,上述方法行不通,我就编了一个makefile如下:
LDLIBDIR1=/cross/tool-mips/mips3-linux/lib
LDLIBDIR2=/cross/tool-mips/mips3-mgp32-eb-gnu/lib
LDFLAGS+=-lc -lgcc -lc

mm.o:    mm.c
        /cross/tool-mips/mips3-mgp32-eb-gnu/bin/mips3-linux-gcc  -c mm.c  -o mm.o
all:    mm.o
        /cross/tool-mips/bin/mips3-linux-ld -L$(LDLIBDIR1) -L$(LDLIBDIR2) -elf2fit crti.o crtbegin.o mm.o libc.a  crtend.o $(LDFLAGS)
可编译的时候出下面的错
/cross/tool-mips/mips3-mgp32-eb-gnu/bin/mips3-linux-gcc  -c mm.c  -o mm.o
/cross/tool-mips/bin/mips3-linux-ld -L/cross/tool-mips/mips3-linux/lib -L/cross/tool-mips/mips3-mgp32-eb-gnu/lib -elf2fit crti.o crtbegin.o mm.o libc.a  crtend.o -lc -lgcc -lc
/cross/tool-mips/bin/mips3-linux-ld: crti.o: No such file: 没有那个文件或目录
可是 crti.o趋势就放在 LDLIBDIR1下面啊,怎么还找不到?

3,顺便问一句,链接的时候为什么要用 crti.o crtbegin.o crtend.o
    这些文件?它们究竟是作什么用的?

4,我又用自己的交叉编译器 编译 busybox,但发现出现下面的错误:
/cross/material/busybox-1.1.2/libbb/libbb.a(bb_xgetpwnam.o): In function `bb_xgetpwnam':
bb_pwd.c.text+0x14): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/cross/tool-mips/lib/gcc/mips3-linux/3.4.4/../../../../mips3-linux/bin/ld: warning: cannot find entry symbol __start; defaulting to 00000000100000a0
/cross/tool-mips/mips3-mgp32-eb-gnu/lib/libc.a(printf_fp.o): In function `__printf_fp':
/cross/material/glibc-2.3.5/stdio-common/printf_fp.c:344: undefined reference to `__lttf2'
collect2: ld returned 1 exit status
make[1]: *** [busybox_unstripped] 错误 1
make: *** [_all] 错误 2

这又是怎么回事?感觉好像是交叉编译器没有安装成功
回复 支持 反对

使用道具 举报

发表于 2006-6-2 16:03:38 | 显示全部楼层
http://cross-lfs.org/view/svn/

也许这个是你想要的。来 LFS 看看。:)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-3 11:05:04 | 显示全部楼层

可是 http://cross-lfs.org/view/svn/ 我居然上不去,faint

可是 http://cross-lfs.org/view/svn/ 我居然上不去,faint

我怀疑自己 第二次编译gcc时候出了问题。

我编glibc好几次(那叫个费时啊,呵呵)

因为开始编译glibc的时候,是按照 默认的编译选项设置的,而mips有好几种体系结构
   和 编程接口,所以我后来用 按照这个默认编译选项 作出的 cross compile
   不能编译出我们的 tagget上运行的程序(我们cpu用的是mips64,大字节序)

所以现在,我在编译 glibc的时候,加上了CFLAGS选项:
  CFALGS="march=mips3 -mno-branch-likely -mabi=n32 -mgp32 -EB"
结果 用这样的 glibc 在第二次编译 gcc的时候却报这样的错误:
  “ as 无法识别 -EB 参数” 的错误

请大侠支着,呜呜。

另外 终极幻想 老兄,哪里能找到 制作交叉编译的资料?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-3 11:06:59 | 显示全部楼层

我怀疑自己 第二次编译gcc时候出了问题,哪位高手救救我啊,编译一次就是2个钟头,快死人

我怀疑自己 第二次编译gcc时候出了问题。

我编glibc好几次(那叫个费时啊,呵呵)

因为开始编译glibc的时候,是按照 默认的编译选项设置的,而mips有好几种体系结构
   和 编程接口,所以我后来用 按照这个默认编译选项 作出的 cross compile
   不能编译出我们的 tagget上运行的程序(我们cpu用的是mips64,大字节序)

所以现在,我在编译 glibc的时候,加上了CFLAGS选项:
  CFALGS="march=mips3 -mno-branch-likely -mabi=n32 -mgp32 -EB"
结果 用这样的 glibc 在第二次编译 gcc的时候却报这样的错误:
  “ as 无法识别 -EB 参数” 的错误

请大侠支着,呜呜。
回复 支持 反对

使用道具 举报

发表于 2006-6-3 11:13:03 | 显示全部楼层
所以现在,我在编译 glibc的时候,加上了CFLAGS选项:
[color="Red"]CFALGS="[color="Red"]march=mips3 -mno-branch-likely -mabi=n32 -mgp32 -EB"
结果 用这样的 glibc 在第二次编译 gcc的时候却报这样的错误:
“ as 无法识别 -EB 参数” 的错误
应该是 [color="Red"]CFLAGS="[color="Red"]-march..."

LFS 的 Hints 里还有一篇 cross-compiling 的文章,你能连上 www.linuxfromscratch.org 否?
回复 支持 反对

使用道具 举报

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

本版积分规则

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