在C++中嵌入Lua:链接问题(liblua5.1.a)

有人知道为什么会发生这些错误,以及如何修复它们吗?

我将 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 

原文链接 https://stackoverflow.com/questions/4913571

点赞
stackoverflow用户666412
stackoverflow用户666412

http://lua-users.org/wiki/BuildingLua 中有一个注意事项:

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

请注意,Lua 是 ANSI C 的一个干净的子集,可以编译为 C 或 C++。Lua 头文件中不包含 {#ifdef \_\_cplusplus extern "C" {#endif ... Lua header ...#ifdef \_\_cplusplus}#endif },因此可以通过更改文件名来将 lua 编译为 C 或 C++,而无需对文件内容进行任何更改。

如果 lua 已经编译为 C 库(这通常是预打包的二进制文件),要将 Lua 嵌入到 C++ 应用程序中(即将 C 连接到 C++)您需要将 extern "C" 放在 C++ 应用程序中的 Lua 头文件包含周围,例如,

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

如果不这样做,可能会因为 C++ 名字重载而导致链接错误。

请不要在邮件列表上抱怨此事。 :-) 请花些时间在邮件列表上搜索,因为这已经多次讨论过了。

可以说如果您正在分发库的预打包二进制文件,则已将 lua 核心编译为 C(最有可能)或 C++,如果您将 lua 编译为 C,则应修改 lua 头文件以指示这一点。然而,作者不建议使用预构建的 lua 库,他们建议直接将 lua 源包含到您的应用程序中。请参见 BuildingModules 以进行讨论(页面底部)。

默认情况下,如果 lua 5.1 或更高版本使用 C++ 编译,则将使用 C++ 异常来取消堆栈展开,而不是 longjmp/setjmp,尽管这是可配置的(在编译时)。有关此事的讨论,请参见 luaconf.h 中的 LUAI_THROW/LUAI_TRY。

2012-03-21 11:34:15
stackoverflow用户443513
stackoverflow用户443513

你可以直接在你的 C++ 源代码中包含 lua.hpp

2012-06-15 08:56:07