我正在尝试交叉编译一个 rust 项目,arm-linux-musleabihf
并且在使用musl-cross-make
. rust 项目有一个依赖项libgit2
,这似乎是导致问题的依赖项。
使用:
- 最新的 rust (1.43.1 via
rustup
) arm-unknown-linux-musleabihf
目标_- 最新
musl-cross-make
的TARGET=arm-linux-musleabihf
- 指向
TARGET_CC_linux_arm-unknown-linux-musleabihf
和CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER
在/opt/musl-cross-make/output/bin/arm-linux-musleabihf-gcc
构建时出现错误:
error: linking with `/opt/musl-cross-make/output/bin/arm-linux-musleabihf-gcc` failed: exit code: 1
...
= note: /opt/musl-cross-make/output/bin/../lib/gcc/arm-linux-musleabihf/9.2.0/../../../../arm-linux-musleabihf/bin/ld: /tmp/rustcvSvGAJ/liblibgit2_sys-e56c2f9bd024a0a9.rlib(odb.o): in function `git_odb__add_default_backends':
odb.c:(.text.git_odb__add_default_backends+0x24): undefined reference to `__stat_time64'
/opt/musl-cross-make/output/bin/../lib/gcc/arm-linux-musleabihf/9.2.0/../../../../arm-linux-musleabihf/bin/ld: /tmp/rustcvSvGAJ/liblibgit2_sys-e56c2f9bd024a0a9.rlib(config.o): in function `git_config_add_file_ondisk':
config.c:(.text.git_config_add_file_ondisk+0x34): undefined reference to `__stat_time64'
/opt/musl-cross-make/output/bin/../lib/gcc/arm-linux-musleabihf/9.2.0/../../../../arm-linux-musleabihf/bin/ld: /tmp/rustcvSvGAJ/liblibgit2_sys-e56c2f9bd024a0a9.rlib(config_file.o): in function `config_file_read':
config_file.c:(.text.config_file_read+0x48): undefined reference to `__stat_time64'
...etc...
链接器似乎难以解析特定于 musl 的time64
符号,目前尚不清楚原因。
如果:
- 我
x86_64-linux-musl
在 rust 和musl-cross-make
- 我
musl-cross-make
用MUSL_VER=1.1.24
time
我还编写了一个同时使用和的小 C 程序,它stat
基于交叉编译器上的 musl 1.2.0 构建,没有任何问题。
这里发生了什么?libgit2
这意味着它找不到正确的__time64
符号有什么特别之处?