Я пытаюсь динамически связать библиотеку Rust .so с программой C в Linux с gcc. Использование только dlopen
и dlclose
результатов без каких-либо ошибок, но я получаю ошибку сегментации с помощью следующего кода:Как динамически загружать библиотеку Rust в C?
char * (*my_function)(char *);
char *my_input_string = "foo";
//...abbreviated code...
my_function = dlsym(handle, "my_function");
char *my_output_string = (*my_function)(my_input_string);
Я использую gcc -g foo.c -ldl -o foo
для компиляции, если это имеет значение.
Я знаю, что это найти символ, потому что я использовал #[no_mangle]
в библиотеке ржавчины и my_function
указатель не нулевой
Что такое подпись ржавчины для 'my_function'? – malbarbo
@malbarbo Это 'pub extern 'C" fn my_function (my_string: * const c_char) -> * const c_char' –