spotifyd,arm64交叉编译

spotifyd, cross compiling for arm64

我正在尝试使用 cargo build --release --target aarch64-unknown-linux-gnu 为我的 aarch64 架构编译 spotifyd,所有依赖项都已安装,到目前为止,编译工作正常。

但是,最后一步 (Compiling spotifyd v0.1.1 (file:///home/ubuntu/spotifyd)) 失败了:

 = note: aarch64-linux-gnu-ld.gold: -Wl,--as-needed: unknown option
          aarch64-linux-gnu-ld.gold: use the --help option for usage information

我的 cargo 配置设置为使用 aarch64 链接器:

/root/.cargo/config

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-ld.gold"

-Wl 似乎在 aarch64-linux-gnu-ld.gold 中不可用,是否有任何我可以使用的 aarch64-linux-gnu-ld.gold 的替代品,或者是否可以删除 -Wl 标志来自货物?

感谢您的建议。

链接器不接受“-Wl”作为选项,它是 gcc 编译器驱动程序的命令行参数。

Gcc 使用此选项将命令行参数传递给链接器,驱动程序 gcc 在输入 .o(对象)文件时将调用该链接器。

参见 gcc 文档 3.14 Options for Linking

-Wl,option

Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas.

查看以下任何解释(直接跳到底部):

Gentoo Wiki,"Failure in compile, unrecognized option" 部分中的“Project: Quality Assurance/As-needed”。

注意正在使用的 Binutils Gold Linker 的版本,参见 Bug 18859 作为示例。总是检查 Bug 报告,但 Bug 不是问题。

直接回答你的最后一个问题"Can I remove -Wl from cargo",是的,你可以,但这样做是错误的;该命令删除未使用的代码。

此选项允许 linker 忽略,即不 link 反对命令行上提供的一些库,如果它们实际上没有被正在使用的共享库使用的话已创建。

你想要做的是将 linker 更改为 aarch64-linux-gnu-gcc 并且 linking 应该可以工作。请参阅 Martinhath 在 Reddit 上的问题“Cross-compiling and linker flags”。

那么你想要的是:

/root/.cargo/config

[target.aarch64-unknown-linux-gnu]

linker = "aarch64-linux-gnu-gcc"