Хочу сделать скриптование своей программы с помощью 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 с включенным туда этим файлом? Сделал так, результат тот же. Почему линкер не находит нужную функцию?