Я пытаюсь вызвать стандартную библиотеку C (libstatgrab) в моей системе и не могу понять, как включить библиотеку в строку ссылки.
У меня запущен Cargobuild.rs
, и вывод этого:
cargo:rustc-link-lib=statgrab
cargo:rustc-link-search=native=/usr/lib/x86_64-linux-gnu/
Так как мой пример - маленький прототип, вот все файлы:
src/systemstats.rs
extern crate libc;
#[repr(C)]
#[derive(Clone, Copy, Debug)]
struct sg_load_stats {
min1: libc::c_double,
min5: libc::c_double,
min15: libc::c_double,
systime: libc::time_t,
}
extern "C" {
fn sg_get_load_stats() -> *mut sg_load_stats;
}
fn main() {
unsafe {
let load_stats = sg_get_load_stats();
println!("[load_stats] {:?}", *load_stats);
}
}
Cargo.toml
[package]
name = "palimpsest"
version = "0.1.0"
authors = ["Savanni D'Gerinel <savanni@luminescent-dreams.com>"]
build = "build.rs"
[dependencies]
libc = "0.2.43"
[[bin]]
name = "systemstats"
path = "src/systemstats.rs"
build.rs
fn main() {
println!("cargo:rustc-link-lib=statgrab");
println!("cargo:rustc-link-search=native=/usr/lib/x86_64-linux-gnu/");
}
И, наконец, вывод сборки:
root@0a2938cbf3b7:/src/palimpsest# cargo build
Compiling palimpsest v0.1.0 (file:///src/palimpsest)
Compiling libc v0.2.43
ls -l error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.1y16o1qfye96o7m0.rcgu.o" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.3ewjf7fna93e7dd4.rcgu.o" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.3rngp6bm2u2q5z0y.rcgu.o" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.4oc10dk278mpk1vy.rcgu.o" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.4xq48u46a1pwiqn7.rcgu.o" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.51s1w397y42gpez1.rcgu.o" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.8xzrsc1ux72v29j.rcgu.o" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.oa3rad818d8sgn4.rcgu.o" "-o" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e" "/src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.crate.allocator.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/src/palimpsest/target/debug/deps" "-L" "/usr/lib/x86_64-linux-gnu/" "-L" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/src/palimpsest/target/debug/deps/liblibc-fe86c4c07bd339cb.rlib" "-Wl,--start-group" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-448e7f800092c158.rlib" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-187d239173779b21.rlib" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc_jemalloc-1016cb92bf3e0c0f.rlib" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-404ca41e10f51fe1.rlib" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc_system-3c640c2d04fa8073.rlib" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-6ea835c502ac484a.rlib" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-b77d79244be470bc.rlib" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-a51c1c47035430ae.rlib" "-Wl,--end-group" "/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-0413689b51de5d7d.rlib" "-Wl,-Bdynamic" "-lutil" "-lutil" "-ldl" "-lrt" "-lpthread" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil"
= note: /src/palimpsest/target/debug/deps/systemstats-a71368fbbfd6ba9e.3ewjf7fna93e7dd4.rcgu.o: In function `systemstats::main':
/src/palimpsest/src/systemstats.rs:19: undefined reference to `sg_get_load_stats'
collect2: error: ld returned 1 exit status
error: aborting due to previous error
Вывод сборкиболь читать, но там, где я вижу "-L" "/usr/lib/x86_64-linux-gnu/"
, я не вижу -lstatgrab
.Насколько я понимаю, документы таковы, что cargo:rustc-link-lib=statgrab
должен был добавить этот флаг, но это не так.
К сожалению, я проделал некоторую работу, связанную с Cocoa на MacOS, и единственное, что мне нужно для этого, -в моем источнике была одна строка: #[link(name = "Cocoa", kind = "framework")]
, и поэтому я не понимаю, почему я не могу просто использовать подобную строку, #[link(name = "statgrab", kind = "dylib")]
здесь.