我正在尝试使用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"
似乎-Wl
中aarch64-linux-gnu-ld.gold
不可用,我可以使用aarch64-linux-gnu-ld.gold
的其他替代方案,还是可以从货物中删除-Wl
标志?
感谢您的建议。
答案 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 ”