spotifyd,交叉编译arm64

时间:2017-11-22 21:31:38

标签: linux compiler-errors compilation 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

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

/root/.cargo/config

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

似乎-Wlaarch64-linux-gnu-ld.gold不可用,我可以使用aarch64-linux-gnu-ld.gold的其他替代方案,还是可以从货物中删除-Wl标志?

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

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

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

请参阅gcc文档3.14 Options for Linking

  

-Wl,选项

     

传递选项作为链接器的选项。如果选项包含逗号,则会在逗号中将其拆分为多个选项。

请参阅以下任何解释(只是跳到底部):

Gentoo Wiki,“Project: Quality Assurance/As-needed”在“编译失败,无法识别的选项”一节中。

请注意所使用的Binutils Gold Linker的版本,请参阅Bug 18859作为示例。始终检查错误报告,但错误不是问题。

直接回答你的上一个问题“我可以从货物上移除-Wl”,是的,你可以,但这是错误的做法;该命令剥离未使用的代码。

此选项允许链接器忽略(即,不链接)其命令行上提供的某些库(如果它们实际上未被正在创建的共享库使用)。

您要做的是将链接器更改为aarch64-linux-gnu-gcc,并且链接应该可行。请参阅关于Reddit“Cross-compiling and linker flags”的martinhath的问题。

所以你想要的是这个:

  

/root/.cargo/config

     

[target.aarch64-unknown-linux-gnu]

     

linker =“aarch64-linux-gnu- gcc