gpt4 book ai didi

c++ - 试图在 C++ 中嵌入 Lua, "undefined reference to ' dlopen'"

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:24 26 4
gpt4 key购买 nike

简而言之:使用命令g++ -o clua clua.cpp -Wall -Iinclude -L liblua5.1.a liblua5.1.so 编译和链接嵌入lua的c++程序-ldl,获取 liblua5.1.so: undefined reference to 'dlopen',等等。

几周来,我一直在尝试在我的 C++ 游戏中嵌入任何脚本语言,但没有成功,从 V8 到 Python 和 Squirrel。 Lua 被宣传为“易于设置、体积小”等,所以我想我会接受它。

我从 http://sourceforge.net/projects/luabinaries/files/5.1.5/Linux%20Libraries/ 得到了预编译的 lua 二进制文件(我为我的 32 位 ubuntu 13.something 使用了 lua-5.1.5_Linux26g4_lib.tar.gz)并有一个简单的示例程序:

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

我已经阅读了很多对有类似问题的人的回复,提供的选项是:

  • 添加“-ldl”,没有效果
  • 确保“-ldl”在最后,也是这样做的
  • 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?

最佳答案

-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++ - 试图在 C++ 中嵌入 Lua, "undefined reference to ' dlopen'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com