J’essaie de récupérer un pointeur brut d’une fonction C en rouille et d’utiliser ce même pointeur brut comme argument dans une autre fonction C d’une autre bibliothèque. Lorsque je passe le pointeur brut, je me retrouve avec un pointeur NULL du côté C. J’ai essayé de faire une version simplifiée de mon problème, mais quand […]
J’ai une bibliothèque C, qui a l’implémentation de gpio. Il y a gpio_type qui est spécifique à la cible, chaque MCU a une définition différente pour gpio_type. Une des fonctions de la bibliothèque: void gpio_init(gpio_type *object, int32_t pin); Je veux écrire une abstraction de l’object Gpio dans Rust, en utilisant les fonctions de la bibliothèque […]
J’essaie d’obtenir une chaîne C renvoyée par une bibliothèque C et de la convertir en chaîne Rust via FFI. mylib.c const char* hello(){ return “Hello World!”; } main.rs #![feature(link_args)] extern crate libc; use libc::c_char; #[link_args = “-L . -I . -lmylib”] extern { fn hello() -> *c_char; } fn main() { //how do I get […]
En utilisant C, au moment de l’exécution, je peux: Créer le code source d’une fonction, Appelez gcc pour le comstackr en .so (Linux) (ou utilisez llvm, etc.), Chargez le .so, et Appelle la fonction. Est-ce qu’une chose semblable est possible à Rust? En particulier, je souhaite utiliser des types de données algébriques. L’utilisation d’un sous-ensemble […]
J’essaie d’en apprendre davantage sur le FFI dans Rust et sur la liaison avec les bibliothèques C (en particulier libc ). Au cours de ma “quête”, je suis tombé sur le problème suivant. Modèle normal en C void(* sig_set(int sig, void(*handler)(int))) { // uninitialized sigaction structs struct sigaction new_action, old_action; // assign options to new […]
Exemple de code ci-dessous La rouille: #[no_mangle] pub extern fn call_c_function(value: i32, fun: fn(i32) -> i32) -> i32 { fun(value) } Et la partie C: int32_t call_c_function(int32_t value, int32_t (*fun)(int32_t)); int32_t sortingple(int32_t x) { return x*3; } int main(int argc, char *argv[]) { int32_t value = 3; int32_t result = call_c_function(value, sortingple); printf(“%d sortingpled is […]
J’essaie de créer un object partagé que je peux charger dans R qui appelle les fonctions Rust par le biais de l’API C de R. Pour appeler Rust de C, je suis cet article de blog . Mon problème se pose lorsque j’essaie de créer la bibliothèque partagée et de créer un lien vers la […]
Je n’ai peut-être pas décrit correctement le titre de ma question, modifiez-le si nécessaire. J’essaie de créer une interface Rust dans la bibliothèque LXC , qui est écrite en C. J’ai réussi à appeler des fonctions simples comme lxc_get_version ou lxc_container_new mais je ne peux pas accéder aux fonctions décrites dans le bloc struct lxc_container […]
J’essaie de créer une bibliothèque dynamic dans Rust qui exporte une structure sous forme de symbole qui sera chargé dans un programme C via dlopen (). Cependant, je rencontrais des erreurs de segmentation lors de l’access à la deuxième chaîne de la structure. J’ai donc créé un petit programme de test pour essayer de comprendre […]
J’ai une bibliothèque propriétaire avec une longue histoire et un en-tête 30KLoC. Je voudrais générer des liaisons pour Rust à elle. Et j’ai utilisé bindgen caisse presque avec succès. Sauf que bindgen ne peut pas transformer les constantes de macro en constantes normales. Parce que ces constantes sont définies de manière floue, comme #define CONSTANT […]