2016-07-01 7 views
1

Я пытаюсь динамически связать библиотеку 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 указатель не нулевой

+0

Что такое подпись ржавчины для 'my_function'? – malbarbo

+0

@malbarbo Это 'pub extern 'C" fn my_function (my_string: * const c_char) -> * const c_char' –

ответ

0

Я побежал через gdb и оказывается, библиотека пытается вызвать функцию в призвании программы, которой не было.