Как переименовать точку входа в C библиотеке на этапе линковки

Именно, что в самой библиотеке точка входа называется main с сигнатурой int main(int argc, char *argv[]), но когда я ее компилирую через cc

cc::Build::new()
    .file(LIB.join("lib.c"))
    .include(&*LIB)
    .flag("-w")
    .compile("liblib.a");

она компилируется и все хорошо, в rust я могу прописать биндинг

#[link(name = "lib", kind = "static")]
unsafe extern "C" {
    #[link_name = "main"]
    pub fn lib_main(argc: libc::c_int, argv: *const *const c_char) -> libc::c_int;
}

оно тоже все хорошо скопилируется, но вот при вызове такой lib_main он вызывает сам себя, из main, рекурсивно. т.е буквально как

fn main() {
    main();
}

поэтому, не меняя C код библиотеки, мне нужно переименовать ее main, на тот же lib_main. и в Rust уже спокойно вызывать.

как это сделать? менять исходный код библиотеки, понятно дело,что не могу. писать -Dmain=lib_main тоже, потому что валится компиляция уже самой библиотеки (почему то), внутри самой себя она свой же main если что не вызывает.


Ответы (0 шт):