ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
rustc 0.13.0-nightly (f168c12c5 2014-10-25 20:57:10 +0000)
I want to use the ffi gem in conjunction with rust.
I have read this (quite outdated) blog post, which shows how to do that.
The problem is: it doesn't work.
Here is my code:
test.rs:
fn test(bla: i32) -> i32 { bla*bla }
#[no_mangle]
extern fn _test_wrapper(i: i32) -> i32 {
test(i)
}
test.rb:
require 'ffi'
module Test
extend FFI::Library
ffi_lib File.absolute_path 'libtest.so'
attach_function :_test_wrapper, [:int32], :int32
end
I compile test.rs like so:
rustc --crate-type dylib test.rs
And then
ruby test.rb
Output:
/home/me/.rvm/gems/ruby-2.1.2/gems/ffi-1.9.6/lib/ffi/library.rb:261:in `attach_function': Function '_test_wrapper' not found in [/home/me/Dokumente/ruby/rust_require/specs/test/libtest.so] (FFI::NotFoundError)
from test.rb:7:in `<module:Test>'
from test.rb:3:in `<main>'
What do I do wrong? (I already tried making it pub extern fn ..., doesn't work either.)
You were close, you just need to fix the warning you get when you compile the Rust code and make the function public:
To help me debug the problem, I used
nmto see what symbols the compiled library exports. I'm on OS X, so you might have to tweak arguments and filenames:Before marking the function as public, it did not show up in this list.