Theo dõi câu hỏi này here, tôi đang gặp sự cố khi sử dụng dyn.load
để tải thư viện được liên kết với Rust dylib. Tôi nghi ngờ nó có một cái gì đó để làm với nơi R là tìm kiếm các dylib Rust, nhưng tôi đã không tìm thấy một cách để xác định vị trí khác hơn bất cứ điều gì mặc định là.Tải thư viện được chia sẻ được liên kết với thư viện Rust trong R
Từ R, tôi thực hiện như sau:
> dyn.load('src/test.so')
Và nhận được thông báo lỗi này:
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
Làm thế nào để tải một thư viện chia sẻ mà phụ thuộc vào một thư viện chia sẻ?
documentation cho dyn.load
không chỉ định cách thực hiện việc này.
Cập nhật:
Nhờ shepmaster tôi đã có thể xây dựng thành công và nhập khẩu một thư viện được chia sẻ trong R. Các thư viện chia sẻ đã được biên soạn bằng C và được tự liên kết với một thư viện Rust. Đây là những bước của tôi:
- Compile chia sẻ thư viện Rust
- Compile chia sẻ thư viện C và liên kết đến các thư viện Rust bằng cách sử dụng lệnh sau đây (trong Windows như tôi tại nơi làm việc sáng nay)
nội dung thư mục My:
C:\Users\gravesee\test>ls
rglue.dll rglue.rs rustr.c treble.h
Biên dịch thư viện chia sẻ thức:
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
Đang tải thư viện trong R:
> dyn.load("test.dll")
> is.loaded("triple")
[1] TRUE
> .Call("triple", as.integer(32))
The triple is 96
Cảm ơn bạn! Tôi sẽ đọc thêm về rpath nhưng tôi đã có thể tải thư viện được chia sẻ bằng cách khởi chạy R từ cùng một thư mục. Tôi đã học hỏi được rất nhiều câu hỏi này. – Zelazny7