Похоже на это. Я сделал тестовую библиотеку и ящик для мусора рядом:
// hellobin/src/main.rs
extern crate hellolib;
fn main() {
hellolib::func1();
}
Для библиотеки:
// hellolib/src/main.rs
pub fn func1() {
println!("Hello, world!");
}
pub fn func2() {
println!("Hello, other world!");
}
Сборка моего двоичного файла с последующей проверкой символов с помощью nm
:
$ nm target/debug/helloworld | grep hello
0000000100001360 t __ZN10helloworld4main17h749f61fb726f0a10E
00000001000014b0 T __ZN8hellolib5func117hec0b5301559d46f6E
Только последняя функция имеет символ в конечном двоичном файле.
Вы можете скомпилировать с помощью cargo rustc -- -C link-dead-code
, и вы увидите, что присутствуют оба символа, включая неиспользованный:
$ nm target/debug/helloworld | grep hello
0000000100001270 t __ZN10helloworld4main17h3104b73b00fdd798E
00000001000013d0 T __ZN8hellolib5func117hec0b5301559d46f6E
0000000100001420 T __ZN8hellolib5func217hc9d0886874057b84E
Я полагаю (но я не уверен), что это компоновщик, удаляющий мертвый код, поэтому он все еще мог быть скомпилирован и затем удален во время компоновки.