Subject:
[ruby-ffi] how do I properly attach to this function?
From:
Jason Toy
Date:
11/2/11 6:24 PM
To:
ruby-ffi

I have a function  that is called like this in a c ++ app:
   CompactLangDet::DetectLanguage( .....)

I see that C++ symbols are not visible in C so I ran nm on the library
to see the names of the functions:
0000000000002820 T
__ZN14CompactLangDet14DetectLanguageEPKNS_15DetectionTablesEPKcibbbbS4_i8LanguagePS5_PiPdS7_Pb
00000000000028a0 T __ZN14CompactLangDet21DetectLanguageVersionEv
0000000000004440 T
__ZN18CompactLangDetImpl24DetectLanguageSummaryV25EPKN14CompactLangDet15DetectionTablesEPKcibbbS5_i8LanguagebiS6_PS6_PiPdS8_Pb
000000000013b180 s
__ZZN18CompactLangDetImpl24DetectLanguageSummaryV25EPKN14CompactLangDet15DetectionTablesEPKcibbbS5_i8LanguagebiS6_PS6_PiPdS8_PbE18default_cld_tables


So I tried running:

require 'ffi'
module MyLib
  extend FFI::Library
  ffi_lib "#{Dir.pwd}/cld.so"
   #attach_function "CompactLangDet::DetectLanguage",
[ :int, :buffer_in,:int,:bool,:bool,:bool,:bool,:buffer_in,:int,:int,:int,:int,:double,:int,:bool ], :int
   attach_function
"__ZN14CompactLangDet14DetectLanguageEPKNS_15DetectionTablesEPKcibbbbS4_i8LanguagePS5_PiPdS7_Pb",
[ :int, :buffer_in,:int,:bool,:bool,:bool,:bool,:buffer_in,:int,:int,:int,:int,:double,:int,:bool ], :int
end


but I still get an error:
FFI::NotFoundError: Function
'__ZN14CompactLangDet14DetectLanguageEPKNS_15DetectionTablesEPKcibbbbS4_i8LanguagePS5_PiPdS7_Pb'
not found in [/Users/jtoy/sandbox/ccld/cld.so]
	from /Users/jtoy/.rbenv/versions/1.9.3-preview1/lib/ruby/gems/1.9.1/
gems/ffi-1.0.10/lib/ffi/library.rb:247:in `attach_function'



What is the correct way for me to reference this function?