2009-05-22 5 views
1

Ich bin gerade in SWIG als ein Mittel zum Erstellen von Lua Bindings tauchen, und ich habe einen Haken gefunden. Ich habe meine Interface-Datei erstellt und daraus eine gemeinsame Objektdatei erstellt. Allerdings, wenn ich Lua laufen und versuchen, das gemeinsame Objekt zu verlangen, erhalte ich folgenden:luaopen_my_example undefined nach dem kompilieren von swig wrapper

 
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio 
require("my_example") 
error loading module 'my_example' from file './my_example.so': 

     ./my_example.so: undefined symbol: luaopen_my_example 

Stapel Zurückverfolgungs:

 
[C]: ? 

[C]: in function 'require' 

stdin:1: in main chunk 

[C]: ? 

Ich kann nicht alles online scheinen zu finden, um diese Situation zu beschreiben, so Ich dachte, ich würde hier posten. Gibt es irgendwelche SWIG Gurus da draußen? Die Klasse, die ich verpacke, ist ein paar tausend Zeilen lang (und proprietär) oder ich poste sie hier.

Danke! : D

Antwort

1

Welche Version von SWIG verwenden Sie und auf welcher Plattform?

Die etwas veraltete Version 1.3.29 von SWIG, die ich unter Cygwin lief #define SWIG_init tief in seiner generierten Wrapper-Datei den Namen angeben, von require als luaopen_mod wollte begraben verwendet, wo mod der Name in der %module Anweisung am Anfang verwendet wurde, von die SWIG .i Datei. Das Modul, das ich verpackt habe, lädt und arbeitet mit Lua 5.1 unter Windows.

Sie müssen möglicherweise auch etwas tun, um sicherzustellen, dass das Symbol exportiert wird, und wurde nicht in einen C++ - Namen umbenannt, der von Lua nie gefunden wird. Ich wickelte C-Strukturen und einen Teil der Windows-API ein und behandelte daher keine C++ - spezifischen Probleme in diesem Wrapper. Eine versehentliche Namensverfälschung ist jedoch eine häufige Ursache für Probleme beim Laden von Modulen, auch ohne SWIG.

1

/facepalm

ich das Modul hatte in der Schnittstelle misnamed (.i) Datei. Danke trotzdem!

Verwandte Themen