GPS 的交叉编译显示"unrecognized option"

Cross compilation for gpsd shows "unrecognized option"

本文关键字:unrecognized option 显示 交叉编译 GPS      更新时间:2023-10-16

我正在为ARM架构在Ubuntu 16.04上交叉编译gpsd3.20。如您所知,gpsd 使用 Sconsctruct 来编译源代码。在我的交叉编译过程中,当它需要创建 libgps.so 时,它会显示错误unrecognized option '-Wl, -Bsymbolic'

在这里发布问题之前,我尝试检查我的工具链二进制文件,我发现如果我手动运行这一行:

sudo ./arm-v7a-linux-gnueabihf-ld -o test/gpsd-3.20/libgps.so.25.0.0 -pthread -shared -Wl,-Bsymbolic-functions -Wl,-soname=libgps.so.25 test/gpsd-3.20/os_compat.os test/gpsd-3.20/rtcm2_json.os test/rtcm3_json.os test/gpsd-3.20/shared_json.os test/gpsd-3.20/timespec_str.os test/gpsd-3.20/libgpsmm.os -L. -lrt -lm -lrt

上面的命令打印出我之前提到的确切错误。但是,如果我运行确切的命令将ld替换为gcc,则没有任何错误。

sudo ./arm-v7a-linux-gnueabihf-gcc -o test/gpsd-3.20/libgps.so.25.0.0 -pthread -shared -Wl,-Bsymbolic-functions -Wl,-soname=libgps.so.25 test/gpsd-3.20/os_compat.os test/gpsd-3.20/rtcm2_json.os test/rtcm3_json.os test/gpsd-3.20/shared_json.os test/gpsd-3.20/timespec_str.os test/gpsd-3.20/libgpsmm.os -L. -lrt -lm -lrt

在检查arm-v7a-linux-gnueabihf-gcc--help时,我发现,gcc 支持-Wl选项,而在arm-v7a-linux-gnueabihf-ld中它不支持-Wl选项。所以现在我不确定如何更改 SConstruct 文件,使其不会执行ld而是我希望它执行gcc特别是对于 libgps.so 部分。

(无法评论(,所以答案:你有没有尝试设置env.-var.:export LD=arm-v7a-linux-gnuabihf-gcc

GCC 获取-Wl,XXX并将 XXX 传递给链接器。

我认为您在这里有两个组合问题,尽管在不研究构建本身的情况下涉及一些猜测。 首先,scons 不应该在构建库时添加标志(https://github.com/SCons/scons/issues/3248 - 固定的,但我相信不是发布的一部分(。其次,"链接"可能应该使用 gcc 来完成。 如果你调用 gcc 来链接,它仍然在后台调用链接器 - 在处理了用于 gcc 的选项之后,-Wl,-Bsymbolic是这样,这意味着将-Bsymbolic传递到链接阶段(由-Wl表示,"l"表示链接器(。 所以我假设你告诉 scons 关于交叉工具链的方式也不是很正确,如果它直接调用 ld,你可能也会遇到其他问题。