我试图在我的路由器上交叉编译MIPSEL。我有一些东西在汇编工作,但现在我开始尝试编译基本的C代码。
目前只有简单的hello world c代码,并使用mipsel-linux-gnu-gcc编译器,它适用于汇编。
编译命令:
mipsel-linux-gnu-gcc -L/home/uname/devel/extr/squashfs-root/lib -l:libc.so.0 -mips32 -Wl,--build-id=none -Wl,--dynamic-linker=/lib/ld-uClibc.so.0 ma.c
libc.so.0是从路由器的固件中提取的。
该程序编译,但在readelf中,问题是它链接到libc.so.6
0x00000001 (NEEDED) Shared library: [libc.so.6]
然后从固件中拉出busybox二进制文件并在其上运行readelf
0x00000001 (NEEDED) Shared library: [libc.so.0]
如何让它链接到libc.so.0?
看起来你需要否定标准的glibc路径,因为编译器首先检查它。这可以通过使用-nostdinc
进行编译来完成。
然后你需要-I
包括gcc标题等,正如讨论的here.
弄清楚了。不得不使用buildroot构建一个uClibc工具链。