目前使用的mips的编译工具链为eldk4.1
这个工具链在ubuntu10.04上正常编译程序,但这个系统太老了,换了个ubuntu12.04,编译helloworld会报下面的错误
各种修改都没有解决问题,感觉像是操作系统的库文件和工具链的库文件有差异造成的
/home/kevin/Documents/mips-tools/usr/bin/../lib/gcc/mips-linux/4.0.0/../../../../mips-linux/bin/ld: warning: ld.so.1, needed by /home/kevin/Documents/mips-tools/usr/../mips_4KC/lib/libc.so.6, not found (try using -rpath or -rpath-link)
/home/kevin/Documents/mips-tools/usr/../mips_4KC/lib/libc.so.6: undefined reference to `_rtld_global@GLIBC_PRIVATE'/home/kevin/Documents/mips-tools/usr/../mips_4KC/lib/libc.so.6: undefined reference to `__libc_enable_secure@GLIBC_PRIVATE'
/home/kevin/Documents/mips-tools/usr/../mips_4KC/lib/libc.so.6: undefined reference to `_rtld_global_ro@GLIBC_PRIVATE'
/home/kevin/Documents/mips-tools/usr/../mips_4KC/lib/libc.so.6: undefined reference to `_dl_out_of_memory@GLIBC_PRIVATE'
/home/kevin/Documents/mips-tools/usr/../mips_4KC/lib/libc.so.6: undefined reference to `__libc_stack_end@GLIBC_2.2'
/home/kevin/Documents/mips-tools/usr/../mips_4KC/lib/libc.so.6: undefined reference to `_r_debug@GLIBC_2.0'
/home/kevin/Documents/mips-tools/usr/../mips_4KC/lib/libc.so.6: undefined reference to `_dl_argv@GLIBC_PRIVATE'
collect2: ld returned 1 exit status
过了好一段时间,尝试解决这个问题,
追踪/home/kevin/Documents/mips-tools/usr/bin/../lib/gcc/mips-linux/4.0.0/../../../../mips-linux/bin/ld
lrwxrwxrwx 1 kevin kevin 23 Jun 24 20:58 /opt/mips/eldk4.1/usr/mips-linux/bin/ld -> ../../bin/mips-linux-ld
而我使用的工具链是mips_4KC-
所以我尝试将这个ld指向
$ ln -s
/opt/mips/eldk4.1/usr/bin/mips_4KC-ld /opt/mips/eldk4.1/usr/mips-linux/bin/ld
编译试了一下竟然编译成功了
又发现
$ ls /opt/mips/eldk4.1/usr/bin/mips_4KC-ld -al
lrwxrwxrwx 1 kevin kevin 13 Jun 24 20:58
/opt/mips/eldk4.1/usr/bin/mips_4KC-ld -> mips-linux-ld
实际上mips_4KC-ld 又指向了mips-linux-ld,其实是一回事,那为什么编译能成功呢?
猜想:ld直接指向mips-linux-ld与指向
mips_4KC-ld
再指向
mips-linux-ld
有一点不同
那就是名字不一样,使用mips_4KC-ld的名字执行是一种结果,而使用mips-linux-ld又是一种结果
就好比busybox,你执行的ls,pwd,cd等命令最终都是链接到busybox,busybox就可以根据这个名字来区分
你执行的到底是哪个命令