2009-05-22 2 views
1

Я только сейчас погружения в SWIG как средство для создания Lua привязки, и я врезался в препятствии. Я сделал свой файл интерфейса и без проблем создал общий файл объектов из него. Однако, когда я бегу Lua и попытаться потребовать от общего объекта, я получаю следующее:luaopen_my_example неопределенного после компиляции Swig обертки

 
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 

стека TRACEBACK:

 
[C]: ? 

[C]: in function 'require' 

stdin:1: in main chunk 

[C]: ? 

Я не могу показаться, чтобы найти что-нибудь в Интернете, описывающий эту ситуацию, так Я думал, что отправлю сюда. Есть ли там SWIG-гуру? Класс, который я обертываю, состоит из нескольких тысяч строк (и проприетарных), или я бы разместил его здесь.

Спасибо! : D

ответ

1

Какая версия SWIG вы используете и на какой платформе?

Слегка черствый версия 1.3.29 из SWIG, что я побежал под Cygwin использует #define SWIG_init похоронена глубоко в созданном файле обертку, чтобы указать имя разыскиваемого require, как luaopen_mod где mod было имя, используемое в %module заявлении в верхней части файл SWIG .i. Модуль, который я завернул, загружает и работает с Lua 5.1 в Windows.

Вы также, возможно, потребуется сделать что-то, чтобы убедиться, что символ экспортируется, и не назовёшь-подогнаны к имени C++, которые никогда не будут найдены на Lua. Я обертывал C-структуры и часть Windows API, поэтому не имел дело с какими-либо специфическими проблемами C++ в этой оболочке. Тем не менее, случайное изменение имен является частой причиной проблем с загрузкой модуля даже без участия SWIG.

1

/Facepalm

Я имел модуль неправильно именованный в интерфейсе (.i) файл. Спасибо, в любом случае!