我试图交叉编译一个arm-linux-musleabihf
的rust项目,但在使用musl-cross-make
时遇到了一个链接器错误.rust项目依赖于libgit2
,这似乎是导致问题的原因.
使用:
- 最新 rust 蚀(1.43.1至
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
个符号,原因尚不清楚.
如果:
- 我在rust和
musl-cross-make
上都使用了x86_64-linux-musl
目标 - 我用
MUSL_VER=1.1.24
建musl-cross-make
我还编写了一个使用time
和stat
的小C程序,它在交叉编译器的musl 1.2.0上构建,没有任何问题.
这是怎么回事?libgit2
有什么特别之处,这意味着它找不到正确的__time64
个符号?