移植一个开源库发现编译一直报找不到libm,libc等系统库。
不断发原因,增加--sysroot,加-L都不能将路径传入到参数中。
最后增加verbose,发现,其链接是通过g++调用的ld,不是直接ld。
进一下分析,发现ld调用的是一个脚本实现路径,sysroot和L参数等传不进ld。
核心原因。
由于办法,1,将ld的内置脚本导出来,用命令行可以导出。
mips-mti-linux-gnu-ld --verbose -shared -z combreloc > my_script.lds
再将脚本里的搜索目录修改成自己的目录:
SEARCH_DIR("=/home/deng/H3_Android/hc_linux_A3100/tool-chain/lib");
SEARCH_DIR("=/home/deng/H3_Android/hc_linux_A3100/tool-chain/mipsel-buildroot-linux-gnu/sysroot/lib"); SEARCH_DIR("=/lib");
SEARCH_DIR("=/home/deng/H3_Android/hc_linux_A3100/tool-chain/mipsel-buildroot-linux-gnu/sysroot/usr/lib");
下一步,在LDFLAGS中增加指定脚本选项
export LDFLAGS="-Wl,--verbose -B${STAGING_DIR}/usr/lib -Wl,-T,${LD_SCRIPT_PATH}"
重新编译,链接成功。