MontaVista GCC链接报错`cannot find -lgcc_s`的解决求助
解决MontaVista GCC工具链在Cygwin下链接报错
cannot find -lgcc_s的问题 问题根源分析
- Windows快捷方式不被Cygwin链接器识别:工具链中的
libgcc_s.so.lnk是Windows格式的快捷方式,而MontaVista的MIPS交叉链接器ld只识别Unix风格的符号链接或直接的共享库文件,因此无法通过这个快捷方式找到实际的libgcc_s.so.1。 - 挂载目录选择错误:将工具链挂载到Cygwin的
/usr/bin和/usr/lib会与Cygwin自身的系统库冲突,且交叉编译工具链需要独立的路径配置,不能混入宿主系统库路径。
具体解决方法(无需修改构建计划)
方法1:替换Windows快捷方式为Cygwin符号链接
- 打开Cygwin终端,进入工具链的lib目录:
cd /cygdrive/c/MontaVista/opt/montavista/pro/devkit/mips/fp_be/lib - 删除无效的Windows快捷方式:
rm libgcc_s.so.lnk - 创建指向实际库文件的Unix符号链接:
这样链接器查找ln -s libgcc_s.so.1 libgcc_s.so-lgcc_s时,会直接通过这个符号链接定位到libgcc_s.so.1。
方法2:配置LD_LIBRARY_PATH指定库搜索路径
- 在Cygwin环境中预先设置环境变量,让链接器优先搜索工具链的lib目录:
export LD_LIBRARY_PATH=/cygdrive/c/MontaVista/opt/montavista/pro/devkit/mips/fp_be/lib:$LD_LIBRARY_PATH - 可以将这条命令添加到Cygwin的启动脚本(如
~/.bashrc)或容器启动时的初始化脚本中,确保构建过程自动继承该环境变量。
方法3:用包装脚本注入库搜索参数
- 创建一个名为
mips_fp_be-g++-wrapper的脚本,内容如下:#!/bin/bash /cygdrive/c/MontaVista/opt/montavista/pro/devkit/mips/fp_be/bin/mips_fp_be-g++ -L/cygdrive/c/MontaVista/opt/montavista/pro/devkit/mips/fp_be/lib "$@" - 给脚本添加执行权限:
chmod +x mips_fp_be-g++-wrapper - 将脚本所在目录添加到
PATH最前端,确保构建计划调用的mips_fp_be-g++实际指向这个包装脚本,自动添加库搜索路径参数。
验证步骤
- 执行以下命令检查链接器的搜索路径是否包含目标目录:
mips_fp_be-ld --verbose | grep SEARCH_DIR - 或通过编译器命令确认库搜索路径:
mips_fp_be-g++ -print-search-dirs
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

