在构建lsnes时出现"undefined lua_xxxxx"链接错误

在我的ubuntu 14.xx系统中,我尝试编译lsnes模拟器以使用来自【aleju/mario-ai】(https://github.com/aleju/mario-ai) 的mario-ai脚本,我已经尝试了许多解决下面问题的方法:

#这是来自控制台的输出:

make \ [3 ]:__all__.files' is up to date. make [3]: Leaving directory /home/pengsuyu/software/lsnes/sourcecode/src/platform/macosx ' make \ [2 ]: Leaving directory /home/pengsuyu/software/lsnes/sourcecode/src/platform' g ++ -o lsnes cat all_common.files all_platform.files -pthread -lboost_iostreams -lboost_filesystem -lboost_system -lz -lgcrypt -lgpg-error -L/usr/lib/x86_64-linux-gnu -lcurl -rdynamic -ldl cat core/ all.ldflags lua/ all.ldflags fonts/ all.ldflags library/ all.ldflags interface/ all.ldflags video/ all.ldflags emulation/ all.ldflags cmdhelp/ all.ldflags platform/ all.ldflags core/multitrack.o: In function lua::state::get_string(int, std::string const\u0026)': /home/pengsuyu/software/lsnes/sourcecode/src/core/../../include/library/lua-base.hpp:317: undefined reference to lua_tolstring' core/multitrack.o: In function lua::state::get_bool(int, std::string const\u0026)': /home/pengsuyu/software/lsnes/sourcecode/src/core/../../include/library/lua-base.hpp:334:undefined reference to lua_toboolean' core/multitrack.o: In function lua::state::type(int)': . . /home/pengsuyu/software/lsnes/sourcecode/src/library/lua.cpp:536: undefined reference to lua_close' library/lua.o: In function lua::state::pushcfunction(int ( )(lua_State))': /home/pengsuyu/software/lsnes/sourcecode/src/library/../../include/library/lua-base.hpp:504: undefined reference to lua_pushcclosure' library/lua.o: In function lua::state::getfield(int, char const*)': /home/pengsuyu/software/lsnes/sourcecode/src/library/../../include/library/lua-base.hpp:506:undefined reference to lua_getfield' library/lua.o: In function lua::state::insert(int)': /home/pengsuyu/software/lsnes/sourcecode/src/library/../../include/library/lua-base.hpp:509: undefined reference to lua_insert' collect2: error: ld returned 1 exit status make[1]: *** [lsnes] Error 1 make[1]: Leaving directory/home/pengsuyu/software/lsnes/sourcecode/src ' make: *** [src/ all_files] Error 2

#==================================

一开始,我认为链接器找不到我的lua库。所以我尝试使用test.lua编译我的main.cpp。

main.cpp:

#include <stdio.h>
#include <iostream>

//extern "C"
//{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
//} // liblua5.1-c++.a
lua_State * L;
int main ()
{
     L = lua_open();
     luaL_openlibs(L);
     luaL_dofile(L, "d:\\test.lua");
     return 0;
}

test.lua:

print("Hello World");

我编写了一个MakeFile来生成可执行文件"main":

main:main.o
    gcc-o $@ $ < -llua5.1 -lstdc++
main.o:
    gcc-c main.cpp
clean:
    -rm *.o

它可以工作,当我添加编译选项"-llua5.1"和"-lstdc++"时,否则它会抛出与我编译lsnes时相同的错误

我不熟悉gcc和Makefile。请帮我解决这个问题。

点赞
用户7367592
用户7367592

我解决了我的问题

解决这个问题的方法只是改变文件中名为“options.build”的一行。

1. 在 options.build 中找到 “LUA=lua” 这一行

2. 将这一行修改为 “LUA=lua5.1”

因为所需的库是5.1版本,所以如果你想成功构建它,你必须使用“lua5.1”库,然而默认配置是“lua”而不是“lua5.1”。

2017-04-01 08:21:05