2016-07-01 26 views
1

Ich versuche, eine Rust .so-Bibliothek dynamisch mit einem C-Programm in Linux mit gcc zu verknüpfen. Mit nur dlopen und dlclose führt zu keinem Fehler, aber ich erhalte einen Segmentation Fault mit dem folgenden Code:Wie man eine Rust-Bibliothek in C dynamisch lädt?

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); 

ich gcc -g foo.c -ldl -o foo zu kompilieren bin mit, wenn es ankommt.

Ich weiß, dass es das Symbol ist zu finden, weil ich #[no_mangle] in der Rost-Bibliothek verwendet und die my_function Zeiger nicht null

+0

Was ist die Signatur von Rust für 'my_function'? – malbarbo

+0

@malbarbo Es ist 'pub extern 'C" fn meine_funktion (mein_Zeichen: * const c_char) -> * const c_char' –

Antwort

0

Ich laufe es durch gdb und es stellt sich heraus, die Bibliothek wurde versucht, eine Funktion in der Berufung zu nennen Programm, das nicht existierte.