简而言之:使用命令g++ -o clua clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so -ldl
编译和链接嵌入lua的c ++程序,获取liblua5.1.so: undefined reference to 'dlopen'
等等。
我几乎没有成功地在我的c ++游戏中嵌入任何脚本语言几周,从V8到Python和Squirrel。 Lua被称为“易于设置,小型”等,因此我认为我会选择它。
我从http://sourceforge.net/projects/luabinaries/files/5.1.5/Linux%20Libraries/获得了预编译的lua二进制文件(我使用lua-5.1.5_Linux26g4_lib.tar.gz作为我的 32bit ubuntu 13.something )并有一个简单的示例程序:
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
int main()
{
lua_State *L = lua_open();
// load the libs
luaL_openlibs(L);
//run a Lua scrip here
luaL_dofile(L,"foo.lua");
printf("\nI am done with Lua in C++.\n");
lua_close(L);
return 0;
}
保存为“clua.cpp”并放在解压缩的文件夹中(以便它与“liblua5.1.a”和“liblua5.1.so”位于同一目录中,并且lua头文件位于一个名为“include”的文件夹。现在,我正在尝试用控制台编译程序,使用g ++,这是确切的命令:
g++ -o clua clua.cpp -c -Wall -Iinclude
它运行完美,不会产生错误,并按预期创建二进制文件“clua”。当我尝试链接时:
g++ -o clua clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so -ldl
我明白了:
liblua5.1.so: undefined reference to `dlopen'
liblua5.1.so: undefined reference to `dlclose'
liblua5.1.so: undefined reference to `dlerror'
liblua5.1.so: undefined reference to `dlsym'
collect2: error: ld returned 1 exit status
我已经向有类似问题的人阅读了很多回复,提供的选项是:
https://projects.coin-or.org/Ipopt/ticket/230说添加LDFLAGS="-Wl,--no-as-needed"
或--enable-dependency-linking
应该可以做到这一点,现在,我不确定我的命令应该是什么样的,是否要放
g ++ -o clua LDFLAGS =“ - Wl, - no-as-needed”clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so -ldl
或
g++ -o clua -Wl --no-as-needed clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so -ldl
,
g++ --enable-dependency-linking -o clua clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so -ldl
或
g++ -o clua clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so -ldl --enable-dependency-linking
但所有人都犯了错误,如:
cc1plus: error: unknown pass dependency-linking specified in -fenable
https://projects.coin-or.org/Ipopt/ticket/229说:“另一种解决方法是添加配置标志--disable-pthread-mumps”,我做到了:
g ++ -o clua --disable-pthread-mumps clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so -ldl
得到了
cc1plus: error: unknown pass pthread-mumps specified in -fdisable
我在clua.cpp,liblua5.1.a和liblua5.1.so所在的目录中运行了这一切,并且其中有一个名为“include”的文件夹,其中包含标题。我在32位Ubuntu 13上运行它。(10,我认为)。
现在,我可以做些什么来正确链接Lua?
答案 0 :(得分:2)
-L liblua5.1.a liblua5.1.so
看起来错了→link options→-llua5.1
?
然后,在Ubuntu / Debian上有两个不同的lua库,据我记得,其中一个不允许动态库加载,因此-llua5.1-c++
得到它:{{1} }
我的建议:简化,如果你正在与GNU Make挣扎,请使用元制作生成器