11
votes

Appeler manuellement une bibliothèque dynamique de rouille

Je suis en train de jouer avec dynamiclibrary code > .

Le code de ma bibliothèque dynamique (compilé avec Dylib de type DYLIB.RS de type Rusc --Crate code>): P>

~> ./caller 
Unsafe bloc !
call func !
Illegal instruction


0 commentaires

3 Réponses :


5
votes

Je pense que le problème découle du fait que vous coulez entre des types incompatibles. Plus précisément, la déréférence * f va pointer sur le mauvais endroit. J'ai regardé dans le code de rouille pour voir comment la bibliothèque est censée être utilisée et trouvé un exemple dans SRC / LIBRUSTC / PlugIN / CHARGE.RS . J'ai adapté ce code à votre exemple: xxx

la sortie: xxx


2 commentaires

Oh, je vois, merci. La documentation n'est pas claire à ce sujet du tout.


C'est très charitable; Il n'y a pas vraiment de documents pour le moment ... J'ai même vu #! [Autoriser (manquant_docs)] pendant la source de source ^ _ ^.



9
votes

Le problème ici est comment le symbole code> fonctionne fonctionne fonctionne. Il a la signature:

unsafe fn symbol<T>(&self, symbol: &str) -> Result<*mut T, String>


0 commentaires

0
votes

Depuis cette question / réponse, le std :: dynamic_lib API semble avoir disparu. Dès cette écriture, il ressemble à LIBLOADING est le moyen le plus populaire de chargement dynamique des bibliothèques sur Crates.IO .


0 commentaires