所以基本上我得到了lua5.3.3源代码,我试图用mingw构建它
到目前为止我所做的是我在msys中完成了整个操作,然后复制了lib文件和bin文件并将文件包含到mingw相应的文件夹中
然而,当我尝试实际编译使用它的应用程序时,我得到这些错误
这是我用来编译使用lua
的程序的命令gcc syx.cpp -llua
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0xf): undefined reference to `luaL_newstate()'
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0x21): undefined reference to `luaL_openlibs(lua_State*)'
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0x3e): undefined reference to `luaL_loadfilex(lua_State*, char const*, char const*)'
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0x77): undefined reference to `lua_pcallk(lua_State*, int, int, int, int, int (*)(lua_State*, int, int))'
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0x87): undefined reference to `lua_close(lua_State*)'
collect2.exe: error: ld returned 1 exit status
这是文件(非常基本的),以防你需要看到它
#include <stdio.h>
#include <lua5.3/lua.h>
#include <lua5.3/lualib.h>
#include <lua5.3/lauxlib.h>
/* the Lua interpreter */
lua_State* L;
int main ( int argc, char *argv[] )
{
L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "test.lua");
/* cleanup Lua */
lua_close(L);
return 0;
}
我知道库文件存在,因为它是用mingw创建的,即liblua.a,它位于我的mingw lib文件夹中,以及与lua相关的其他文件,例如lua.exe luac.exe包含文件等等所以我我不确定还缺少什么
答案 0 :(得分:0)
好的,我找到了解决方案
结果是gcc正在修改库头中的符号(无论这意味着什么)
需要做的是标题需要包含在extern“C”{// headers}中以使其正常工作
参考在这里:
只是要清楚,这是一个有效的例子:
#include <stdio.h>
extern "C"{
#include <lua5.3/lua.h>
#include <lua5.3/lualib.h>
#include <lua5.3/lauxlib.h>
}
/* the Lua interpreter */
lua_State* L;
int main ( int argc, char *argv[] )
{
L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "test.lua");
/* cleanup Lua */
lua_close(L);
return 0;
}