Did you check that the library has benn compiled with a C compiler? C++ name mangling doesn’t work with NB.
Another thing you can do is to attach gdb to the image and break on the gtk_init call. That way you can see at what stage approximately the error occurs. On 14.12.2013, at 17:11, Esteban Lorenzano <[email protected]> wrote: > Hi, > > I'm trying to create some stuff with Gtk3, and because of it I have a call to > gtk_init using NB-FFI. The call is like this: > > gtkInitArgC: argc argV: argv > <primitive: #primitiveNativeCall module: #NativeBoostPlugin error: > errorCode> > ^ self nbCall: #( void gtk_init ( int *argc, char ***argv ) ) > > > and well, I have a GtkLibrary copied from CairoLibraryLoader who loads the > library. > > system is 64bits, but Gtk3 libraries are "universal" compiled (it has both > formats, i386 and x86_64 inside). > > GtkLibrary loadGtkLibrary actually loads the library (it answers a pointer to > it) and in fact, following the stack track NB is resolving correctly gtk_init > symbol... > > Now, the problem is that a call to > > self gtkInitArgC: 0 argV: 0. > > fails... with this stack trace: > > NBFFICallout class>>signalError: > NBFFICallout class(NBNativeCodeGen class)>>handleFailureIn:nativeCode: > NBFFICalloutAPI>>function:module: > GtkApplication(Object)>>nbCall: > GtkApplication>>gtkInitArgC:argV: > NBFFICallout class(NBNativeCodeGen class)>>retrySend: > GtkApplication>>gtkInit > GtkApplication>>initialize > GtkApplication class(Behavior)>>new > MarsApplication>>platformApplication > MarsApplication>>stop > MarsApplication>>start > UndefinedObject>>DoIt > OpalCompiler>>evaluate > SmalltalkEditor>>evaluateSelectionAndDo: > SmalltalkEditor>>evaluateSelection > PluggableTextMorph>>doIt in Block: [ textMorph editor evaluateSelection ] > PluggableTextMorph>>handleEdit: in Block: [ result := editBlock value ] > TextMorphForEditView(TextMorph)>>handleEdit: > PluggableTextMorph>>handleEdit: > PluggableTextMorph>>doIt > SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [ :morph > | morph doIt ] > BlockClosure>>cull: > BlockClosure>>cull:cull: > BlockClosure>>cull:cull:cull: > KMCategoryBinding>>completeMatch:buffer: > KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [ :l | l completeMatch: > self buffer: aBuffer ] > Array(SequenceableCollection)>>do: > KMKeymap>>notifyCompleteMatchTo:buffer: > KMKeymap>>onMatchWith:notify:andDo: > > and #signalError: argument (errorCode) is nil. > > any idea? > > thanks, > Esteban
