Как переименовать точку входа в 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 если что не вызывает.