自举编译的GCC搜索路径错误问题排查求助
解决QNX 6.3 x86平台编译GCC 10.5时的路径错误问题
问题定位
编译到libstdc++-v3阶段时,链接器尝试访问错误路径/opt/qnx630/target/qnx6x86/lib/crtbegin.o,实际正确路径是/opt/qnx630/target/qnx6/x86/lib,这是GCC的目标平台路径拼接逻辑与QNX 6.3的目录结构不匹配导致的。
修复步骤
1. 修正目标平台三元组格式
QNX 6.3的官方目标三元组应为i386-nto-qnx6.3.0,你当前使用的i386-pc-nto-qnx6.3.0中多余的pc后缀会干扰GCC对目标平台目录的解析,引发路径拼接错误。修改configure的--target选项:
--target=i386-nto-qnx6.3.0
2. 还原sysroot路径映射逻辑
不需要手动复制CRT文件到/usr/local/nyab/i386-pc-nto-qnx6.3.0/lib,保持QNX SDK的原始目录结构即可:
- 确认
/opt/qnx630/target/qnx6/x86/lib下存在crtbegin.o、crtend.o等CRT文件 - GCC会自动通过
--with-sysroot指定的路径查找依赖文件
3. 清理残留后重新编译
执行以下命令彻底清理之前的编译残留,重新配置并编译:
cd bin-qnx63-i386 make distclean ../gcc-10.5.0/configure \ --host=x86_64-pc-linux-gnu \ --target=i386-nto-qnx6.3.0 \ --prefix=/usr/local/nyab \ --program-prefix=nyab- \ --disable-multilib \ --enable-threads=posix \ --enable-tls \ --enable-version-specific-runtime-libs \ --enable-languages=c,c++ \ --disable-libada \ --disable-libgm2 \ --enable-default-pie \ --enable-werror \ --enable-checking \ --enable-valgrind-annotations \ --with-sysroot=/opt/qnx630/target/qnx6 make -j$(nproc)
4. 额外排查点
如果调整三元组后仍有问题,检查以下内容:
- 确认QNX SDK的
as、ld等工具已正确放置在/usr/local/nyab/i386-nto-qnx6.3.0/bin目录下,且具备可执行权限 - 检查环境变量,避免
LIBRARY_PATH或CPATH等变量干扰sysroot的路径解析 - 查看编译目录下的
config.log,搜索qnx6x86相关字符串,定位具体的路径拼接错误来源
内容的提问来源于stack exchange,提问作者Matthew Sherwood
相关产品推荐
相关产品推荐

