概述
最近在搞T113-S3的开发环境,在交叉编译程序的时候,到最后链接的阶段报错:
./arm-linux-gnueabi/bin/ld: cannot find /lib/libc.so.6
./arm-linux-gnueabi/bin/ld: cannot find /usr/lib/libc_nonshared.a
./arm-linux-gnueabi/bin/ld: cannot find /lib/ld-linux.so.3
很明显就是库没找到的原因,但是搞了很长时间,之前做V3S的时候没这个问题。
问题1:cannot find libpthread.so
之前还有个libpthread.so的报错,加入环境变量就搞定了
export SDK_PATH_TARGET=$T113_SDK_PATH/00_sdk/sysroot
export SYSROOT=$SDK_PATH_TARGET
export LD_LIBRARY_PATH=$SDK_PATH_TARGET/usr/lib:$SDK_PATH_TARGET/lib
#加上LDFLAGS就能找到libpthread.so了
export LDFLAGS=-L${SYSROOT}/lib
问题2:cannot find libc.so
这个就比较tricky,以前没遇到过,也没这样做过,好在最后解决了,虽然没找到问题根源。
在${SYSROOT}/usr/lib下,有个文件libc.so,这并非libc的动态链接库,而是一个ld script
#原文件
#cat libc.so
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.3 ) )
#
#
#修改后
#cat libc.so
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )
#
修改后编译链接通过。