简而言之:编译和链接使用命令g++ -o clua clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so -ldl
,获取liblua5.1.so: undefined reference to 'dlopen'
等嵌入lua的c++程序。
从V8到Python和Squirrel,几周来我一直没有尝试将任何脚本语言嵌入到我的c++游戏中。 Lua的市场名称是“易于设置,体积小”等,因此我认为我会这么做。
我已经从http://sourceforge.net/projects/luabinaries/files/5.1.5/Linux%20Libraries/获得了预编译的lua二进制文件(我将lua-5.1.5_Linux26g4_lib.tar.gz用于 32位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头文件位于一个名为的文件夹中“包括”)。现在,我正在尝试使用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
我已经阅读了许多对有类似问题的人的回答,提出的选项有:
LDFLAGS="-Wl,--no-as-needed"
或--enable-dependency-linking
应该可以解决问题,现在,我不确定命令的外观以及是否放置g++ -o clua LDFLAGS =“-Wl,-按需” clua.cpp-墙-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
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”的包含 header 的文件夹。我在32位Ubuntu 13上运行它(我认为是10)。
现在,如何正确链接Lua?
最佳答案
-L liblua5.1.a liblua5.1.so
看起来不对→link options→-llua5.1
吗?
然后,据我所知,Ubuntu / Debian上有两个不同的lua库,其中之一不允许动态库加载,因此需要 -llua5.1-c++
才能获取:sudo apt-get install lua5.1 liblua5.1-dev
我的建议:简化一下,如果您在使用GNU Make时遇到困难,请使用meta-make生成器
关于c++ - 试图将Lua嵌入c++, “undefined reference to ' dlopen'”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23823031/