如何仅使用命令行选项交叉编译scons附带的gpsd

时间:2018-06-19 08:20:05

标签: cross-compiling scons buildroot gpsd

我试图弄清楚如何在buildroot环境中将GPSD 3.16交叉编译为外部包。我已经能够告诉scons它应该使用哪个编译器并生成正确的编译文件。

    scons target=arm-buildroot-linux-gnueabihf-gcc
    file gpsd
    gpsd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 4.9.0, not stripped

所以它通常正常工作,但是当scons尝试将cgps链接到ncurses时,构建失败。当然,scons会产生错误,因为它试图链接到buildroot主机ncurses库。

    arm-buildroot-linux-gnueabihf-gcc -o cgps -pthread -Wl,-rpath,/buildroot/host/usr/lib -Wl,-rpath,/buildroot/host/lib cgps.o -L. -L/buildroot/host/usr/lib -lgps_static -lm -lrt -lncurses /buildroot/host/usr/lib/libncurses.so: file not recognized: File format not recognized

首先,我尝试使用命令行选项includedir和libdir指向目标文件,但scons仍然只使用主机ncurses库。但是在编译其他gpsd组件时,似乎scons正在使用正确的包含。

    arm-buildroot-linux-gnueabihf-gcc -o lcdgps.o -c -Wmissing-prototypes -Wextra -Wall -Wno-uninitialized -Wno-missing-field-initializers -Wcast-align -Wmissing-declarations -Wstrict-prototypes -Wpointer-arith -Wreturn-type -pthread -Wmissing-declarations -O2 -pthread "-I/target/usr/local/include -I/target/usr/local/include/ncurses"

我也尝试使用pkgconfig命令行选项,但得到的结果相同。

到目前为止,我无法让scons使用目标ncurses库而不是主机库。在这个项目中不可能使用GPSD作为内部buildroot包,因此我正在寻找基于外部GPSD包的解决方案,而无需更改构造文件。

2 个答案:

答案 0 :(得分:0)

通过使用与LDFLAGS相同的设置来设置环境变量LINKFLAGS,现在构建过程可以正常工作。

但是我不理解为什么通过设置includeir和libdir不能正常工作。

答案 1 :(得分:0)

Buildroot中已经有gpsd的软件包,请参见https://git.buildroot.org/buildroot/tree/package/gpsd/。您为什么要尝试创建另一个?