Соединить SWIG и Lua
От: DenProg  
Дата: 20.04.09 13:42
Оценка:
Хочу сделать скриптование своей программы с помощью Lua. Связываю с оной через Swig. Беру примеры из документации.

В пребилде проекта:
swig -lua -c++ tests/test.i

Test.i:

%module test
%{
/* Put headers and other declarations here */
extern double My_variable;
extern int    fact(int);
extern int    my_mod(int n, int m);
%}

extern double My_variable;
extern int    fact(int);
extern int    my_mod(int n, int m);


Test.h:

extern "C"
{
#include <lua.h>
#include <lua.hpp>
#include <lualib.h>
#include "lauxlib.h"
}

extern void init(lua_State* luaVM);


Test.cpp:
#include "test.h"

extern int luaopen_test(lua_State* L);

double  My_variable  = 3.0;

/* Compute factorial of n */
int fact(int n)
{
    if (n <= 1)
        return 1;
    else
        return n * fact(n - 1);
}

/* Compute n mod m */
int my_mod(int n, int m)
{
    return(n % m);
}

void init(lua_State* luaVM)
{
...
    luaopen_base(luaVM);
    luaopen_test(luaVM);
...
}


Компиляция упирается в ошибку линкера:
1>test.obj : error LNK2019: unresolved external symbol "int __cdecl luaopen_test(struct lua_State *)" (?luaopen_test@@YAHPAUlua_State@@@Z) referenced in function "void __cdecl init(struct lua_State *)" (?init@@YAXPAUlua_State@@@Z)

Файл test_wrap.cxx в проект включен. Или надо перекомпилить Lua с включенным туда этим файлом? Сделал так, результат тот же. Почему линкер не находит нужную функцию?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.