交叉编译gpsd显示 "未识别的选项"

问题描述 投票:1回答:1

我正在Ubuntu 16.04上交叉编译ARM架构的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

上面的命令会打印出我之前提到的错误信息 然而,如果我运行完全相同的命令,替换掉 ldgcc那就没有任何错误。

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 --帮助,我发现,gcc支持 -Wl选项,而在 arm-v7a-linux-gnueabihf-ld 它不支持 -Wl 选项。所以现在我不知道如何修改SConstruct文件,使它不执行 ld 而我想让它执行 gcc 尤其是libgps.so这一部分,我正在Ubuntu 16.04上交叉编译ARM架构的gpsd3.20。

c++ c gcc scons gpsd
1个回答
0
投票

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

Gcc需要 -Wl,XXX 并将XXX传给链接器。


0
投票

我认为你这里有两个结合问题,虽然没有研究构建本身就有一些猜测。 首先,scons不应该在构建库时加入标志(https:/github.comSConssconsissues3248。 - 修正了,但我相信,这不是版本的一部分)。) 第二,"链接 "可能应该用gcc来完成。 如果你调用gcc进行链接,它仍然会在幕后调用链接器--在处理了为gcc准备的选项之后,这就意味着 -Wl,-Bsymbolic 是指通过 -Bsymbolic 进入连接阶段(用 -Wl,'l'的意思是链接器)。) 所以我猜测你告诉scons的跨工具链的方式也不太对,如果是直接调用ld,你可能也会有其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.