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"
我正在尝试使用 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"