2009-05-22 5 views
1

Je suis juste en train de plonger dans SWIG comme un moyen de créer des liaisons Lua, et j'ai rencontré un problème. J'ai fait mon fichier d'interface et construit un fichier objet partagé à partir de tout cela sans aucun problème. Cependant, quand je lance Lua et essayer d'exiger l'objet partagé, je reçois le texte suivant:luaopen_my_example indéfini après avoir compilé 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 

pile retraçage:

 
[C]: ? 

[C]: in function 'require' 

stdin:1: in main chunk 

[C]: ? 

Je ne peux pas sembler trouver quoi que ce soit en ligne décrivant cette situation, donc Je pensais que je posterais ici. Y a-t-il des gourous SWIG là-bas? La classe que j'emballe est de quelques milliers de lignes (et de propriété) ou je l'afficherais ici.

Merci! : D

Répondre

1

Quelle version de SWIG utilisez-vous et sur quelle plateforme?

La version légèrement rassis 1.3.29 de SWIG que je courais sous Cygwin utilise #define SWIG_init enfoui au plus profond dans son fichier d'emballage généré pour indiquer le nom recherché par require comme luaopen_modmod était le nom utilisé dans la déclaration %module au sommet de le fichier SWIG .i. Le module que j'ai enveloppé ne charge et ne fonctionne pas avec Lua 5.1 sous Windows.

Vous pourriez également avoir besoin de faire quelque chose pour vous assurer que le symbole est exporté, et n'a pas été déformé par un nom C++ qui ne sera jamais trouvé par Lua. J'emballais des struc- tures C et une partie de l'API Windows, donc je n'ai pas traité de problèmes spécifiques à C++ dans ce wrapper. Cependant, le détournement de nom accidentel est une cause fréquente de problèmes de chargement de module même sans SWIG impliqué.

1

/facepalm

J'ai eu le module dans le fichier mal nommé interface (.i). Merci quand même!