我有一个项目依赖于 Hyper 和 Diesel,因此依赖于本地库 OpenSSL 和 libpq。该项目基于 nightly Rust 构建,因为它使用编译器插件。
我目前的尝试是在 Docker 容器上构建。我有 MUSL libc 和库make
,并安装了前缀/usr/local/musl
。我cargo
使用以下命令运行:(不确定某些选项是否多余,我对编译器链不太精通,甚至不确定它们是否最终到达链接器,但我必须尝试,对.)
LDFLAGS="-static -L/usr/local/musl/lib" \
LD_LIBRARY_PATH=/usr/local/musl/lib:$LD_LIBRARY_PATH \
CFLAGS="-I/usr/local/musl/include" \
PKG_CONFIG_PATH=/usr/local/musl/lib/pkgconfig \
cargo build --release --target=x86_64-unknown-linux-musl
当我ldd
得到结果文件时,它揭示了这一点:
$ ldd server
linux-vdso.so.1 (0x00007fffb878e000)
libpq.so.5 => /usr/local/musl/lib/libpq.so.5 (0x00007f4d730e7000)
libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f4d72e82000)
libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f4d72a85000)
libc.so => /usr/local/musl/lib/libc.so (0x00007f4d727f6000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4d725f2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4d72246000)
/lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x000055e2124a2000)
有所有动态链接的东西,有些甚至是“x86_64-linux-gnu”链!什么地方出了错?
我可以毫无问题地制作静态链接的简单纯 Rust 项目。ldd
说它们是静态链接的,并且它们运行没有问题,与我遇到问题的可执行文件不同。
当我--verbose
与 Cargo 一起使用时,我得到了以下rustc
实际构建可执行文件的命令:http: //pastebin.com/ywv0zNBK(哎呀,那个有一个自定义outdir
和-Z print-link-args
,由我添加)添加print-link-args
标志,我得到以下链接器命令: http: //pastebin.com/Aw43qd7h
我如何获得cargo
或rustc
相信我想要一个静态二进制文件?