Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gpsd节目的交叉编译;“未确认期权”;_C++_C_Gcc_Scons_Gpsd - Fatal编程技术网

C++ gpsd节目的交叉编译;“未确认期权”;

C++ gpsd节目的交叉编译;“未确认期权”;,c++,c,gcc,scons,gpsd,C++,C,Gcc,Scons,Gpsd,我正在我的Ubuntu 16.04上为ARM架构交叉编译gpsd3.20。您可能知道,gpsd使用sconstruct编译源代码。在交叉编译过程中,当它需要创建libgps.so时,它会显示一个错误无法识别的选项'-Wl,-Bsymbolic' 在将问题发布到这里之前,我尝试过检查我的工具链二进制文件,我发现如果我手动运行这一行: sudo ./arm-v7a-linux-gnueabihf-ld -o test/gpsd-3.20/libgps.so.25.0.0 -pthread -shar

我正在我的Ubuntu 16.04上为ARM架构交叉编译gpsd3.20。您可能知道,gpsd使用sconstruct编译源代码。在交叉编译过程中,当它需要创建libgps.so时,它会显示一个错误
无法识别的选项'-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
--帮助后,我发现,gcc支持
-Wl
选项,而在
arm-v7a-linux-gnueabihf-ld
中,它不支持
-Wl
选项。因此,现在我不知道如何更改SConstruct文件,使其不执行
ld
,而是希望它执行
gcc
,特别是对于libgps.So部分。

(无法评论),因此回答:您是否尝试设置环境变量:
export LD=arm-v7a-linux-gnuabihf-gcc

Gcc接受
-Wl,XXX
并将XXX传递给链接器。

(无法评论),因此回答:您是否尝试设置环境变量:
export LD=arm-v7a-linux-gnuabihf-gcc


Gcc接受
-Wl,XXX
并将XXX传递给链接器。

我认为这里有两个组合问题,尽管在不研究构建本身的情况下,会有一些猜测。首先,scons不应该在构建库时添加标志(-fixed,但我相信,这不是发行版的一部分)。第二,“链接”可能应该使用gcc来完成。如果您调用gcc to link,它仍然会在幕后调用链接器-在处理了用于gcc的选项后,即
-Wl,-Bsymbolic
,它意味着将
-Bsymbolic
传递到链接阶段(由
-Wl
指示,'l'表示链接器)。因此,我假设您告诉scons关于交叉工具链的方式也不太正确,如果它直接调用ld,您可能还会遇到其他问题。

我认为您在这里遇到了两个组合问题,尽管在不研究构建本身的情况下,会涉及一些猜测。首先,scons不应该在构建库时添加标志(-fixed,但我相信,这不是发行版的一部分)。第二,“链接”可能应该使用gcc来完成。如果您调用gcc to link,它仍然会在幕后调用链接器-在处理了用于gcc的选项后,即
-Wl,-Bsymbolic
,它意味着将
-Bsymbolic
传递到链接阶段(由
-Wl
指示,'l'表示链接器)。因此,我假设您告诉scons关于交叉工具链的方式也不太正确,如果它直接调用ld,您可能还会遇到其他问题。

嗨,据我所知,arm-v7a-linux-gnueabihf-ld是链接器,arm-v7a-linux-gnueabihf-gcc是编译器。这是两种不同的工具,用于两种不同的目的。对于编译,使用arm-v7a-linux-gnueabihf-gcc似乎更合适。你的问题似乎与某些选项有关。您是否查看了用于gcc的选项文档:?-Wl是一个将逗号后的任何内容传递给链接器子进程的指令。因此,如果您将其直接传递给链接器,它将失败。在这种情况下,您需要通过'-b符号据我所知,arm-v7a-linux-gnueabihf-ld是链接器,arm-v7a-linux-gnueabihf-gcc是编译器。这是两种不同的工具,用于两种不同的目的。对于编译,使用arm-v7a-linux-gnueabihf-gcc似乎更合适。你的问题似乎与某些选项有关。您是否查看了用于gcc的选项文档:?-Wl是一个将逗号后的任何内容传递给链接器子进程的指令。因此,如果您将其直接传递给链接器,它将失败。在这种情况下,您需要传递“-b符号”。