在C++中嵌入Lua:链接问题(liblua5.1.a)
2011-2-6 13:26:51
收藏:0
阅读:167
评论:2
有人知道为什么会发生这些错误,以及如何修复它们吗?
我将 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用户443513
你可以直接在你的 C++ 源代码中包含 lua.hpp
。
2012-06-15 08:56:07
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
在 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。