免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6820 | 回复: 3
打印 上一主题 下一主题

交叉编译器 mips-linux 使用请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-02 13:57 |只看该作者 |倒序浏览
各位同道:
  我费了很大力气,做成了一个 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

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

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-06-02 16:11 |只看该作者
不知道你做的 mips-linux 交叉编译器 是怎么做的?很感兴趣。

其实你自己也发现问题了:编译器和编译环境已经装进系统了,但是路径不对。我有做过嵌入式开发,可惜的是交叉编译的环境都是用的平台提供商的,所以这方面没办法帮你。

.o文件连接的时候会打包进你的elf文件里面。如果你的代码都在一个文件里,就不需要把每个.o连接起来了。是一个中间编译结果。也可以看成是windows下的.dll

论坛徽章:
0
3 [报告]
发表于 2006-06-02 16:56 |只看该作者
这个不是你的编译器有问题,而是你的链接库和头文件的路径有问题,你应该在编译选项中避免使用默认的路径,而且用 -I 和 -L 把你的交叉编译环境中的头文件路径和目标平台的库链进来,我想就可以了。

论坛徽章:
0
4 [报告]
发表于 2006-06-03 11:10 |只看该作者

编译一次就要2个钟头,各位救我啊,要死人了!

可是 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 参数” 的错误

请大侠支着,呜呜。

哪里能找到 比较全的制作 交叉编译器的 资料?

还有 天外闲云 老兄,你说 crt1,crtbegin这些 文件是 作什么用的?在每个c程序里都需要吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP