c++ - 在 C++ 中嵌入 Lua : linkage problems (liblua5. 1.a)

标签 c++ c lua ld

我将 Lua 嵌入到 C++ 应用程序中,但出现以下链接错误:

g++     -o dist/Debug/GNU-Linux-x86/testluaembed build/Debug/GNU-Linux-x86/src/main.o build/Debug/GNU-Linux-x86/src/LuaBinding.o -L../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86 -L../../mainline/tanlib++/dist/Debug/GNU-Linux-x86 -L/usr/lib ../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86/libtanlib_core.so ../../mainline/tanlib++/dist/Debug/GNU-Linux-x86/libtanlibpp.so /usr/lib/liblua5.1.a /usr/lib/libtolua++5.1.a /usr/local/boost_1_45_0/stage/lib/libboost_filesystem.a /usr/local/boost_1_45_0/stage/lib/libboost_system.a 
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `gctm':
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/testluaembed] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

有人知道为什么会出现这些错误,以及如何解决这些错误吗?

最佳答案

http://lua-users.org/wiki/BuildingLua

有一个注释:

在C++应用程序中嵌入Lua的注意事项

请注意,Lua 是 ANSI C 的干净子集,可以编译为 C 或 C++。 Lua headers 中没有 {#ifdef __cplusplus extern "C"{#endif ... Lua header ...#ifdef __cplusplus}#endif } 这样 lua 可以通过更改名称编译为 C 或 C++文件,而无需对文件内容进行任何更改。

如果 lua 被编译为 C 库,这是典型的预打包二进制文件,为了将 Lua 嵌入 C++ 应用程序(即将 C 链接到 C++),您必须在包含的地方放置 extern "C"C++ 应用程序中的 Lua header ,例如,

extern "C" {
#include "lua.h"
}

如果不这样做,您可能会因为 C++ 名称重整而出现链接错误。

请不要在邮件列表上提示这个。 :-) 花点时间搜索邮件列表,因为这在之前已经讨论过很多次了。

有人可能会争辩说,如果你正在分发库的预打包二进制文件,那么你已经将 lua 核心编译为 C(最有可能)或 C++,如果你将 lua 编译为 C,你应该修改lua header 来指示这一点。但是,作者不推荐使用预构建的 lua 库,他们建议直接将 lua 源代码合并到您的应用程序中。有关讨论(页面末尾),请参阅 BuildingModules。

默认情况下,如果 lua 5.1 或更高版本被编译为 C++,它将使用 C++ 异常来展开堆栈而不是 longjmp/setjmp,尽管这是可配置的(在编译时)。请参阅 LUAI_THROW/LUAI_TRY 附近的 luaconf.h 以获取对此的讨论。

关于c++ - 在 C++ 中嵌入 Lua : linkage problems (liblua5. 1.a),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4913571/

相关文章:

lua - 如何检查两个表(对象)在Lua中是否具有相同的值

string - 从字符串中取出两个数字时出错

c++ - 标准库和标准模板库有什么区别?

php - 我需要从 PHP 脚本执行 C 程序

c++ - 模板化 C++ 的等效 C 代码

c - 初始化元素不是常量 - 用于静态初始化

lua 将用户数据转换为字符串

c++ - ncurses可用于Windows吗?

c++ - std::pair 会破坏其动态分配的对象吗?

c - getchar() 并逐行读取