luaopen_my_example не определено после компиляции swig-оболочки - PullRequest
1 голос
/ 23 мая 2009

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

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

трассировка стека:

[C]: ?

[C]: in function 'require'

stdin:1: in main chunk

[C]: ?

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

Спасибо! : D

Ответы [ 2 ]

1 голос
/ 26 мая 2009

/ Facepalm

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

1 голос
/ 23 мая 2009

Какую версию 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.

...