In seguito a questa domanda here, ho problemi con dyn.load
per caricare una libreria condivisa che è collegata a un dylib di Rust. Sospetto che abbia qualcosa a che fare con il punto in cui R sta cercando il dylib di Rust, ma non ho trovato un modo per specificare un'altra posizione rispetto a quella predefinita.Carica una libreria condivisa collegata alla libreria Rust in R
Da R, eseguo il seguente:
> dyn.load('src/test.so')
E ricevere questo messaggio di errore:
Error in dyn.load("src/test.so") :
unable to load shared object '/Users/Zelazny7/r-dev/rustr/src/test.so':
dlopen(/Users/Zelazny7/r-dev/rustr/src/test.so, 6): Library not loaded: libglue.dylib
Referenced from: /Users/Zelazny7/r-dev/rustr/src/test.so
Reason: image not found
Come faccio a caricare una libreria condivisa che dipende da un'altra libreria condivisa?
Il documentation per dyn.load
non specifica come eseguire questa operazione.
Aggiornamento:
Grazie a shepmaster sono stato in grado di costruire con successo e importare una libreria condivisa in R. La libreria condivisa è stata compilata in C ed è essa stessa collegata a una libreria di Rust. Questi sono stati i miei passi:
- Compile libreria condivisa Rust
- Compile condiviso libreria C e il link alla libreria Rust utilizzando il seguente comando (in Windows, come io sono al lavoro questa mattina)
I miei contenuti delle directory:
C:\Users\gravesee\test>ls
rglue.dll rglue.rs rustr.c treble.h
Compilare la libreria condivisa finale:
gcc -shared -m64 -I"C:\Program Files\R\R-3.2.0\include" rustr.c -L"C:\Program Files\R\R-3.2.0\bin\x64" -lR -L. -lrglue -o test.dll
Caricamento della libreria in R:
> dyn.load("test.dll")
> is.loaded("triple")
[1] TRUE
> .Call("triple", as.integer(32))
The triple is 96
Grazie! Leggerò di più su Rpaths ma sono stato in grado di caricare la libreria condivisa avviando R dalla stessa directory. Ho imparato molto a fare queste due domande. – Zelazny7