在Linux上嵌入Lua的静态库进行链接时出现错误。
2020-6-20 9:12:55
收藏:0
阅读:90
评论:1
更新
在项目2(console)中使用了-ldl和链接liblua.a后,编译是可以的,但当运行时,一旦运行Lua函数,它就会崩溃并出现错误Segment fault (core dumped)。
问题背景:
操作系统: Linux Ubuntu
IDE: CodeBlock
语言: C++
2个项目:
项目1: 使用Lua的静态库;
项目2: 控制台应用程序,使用项目1生成的库
问题描述
项目1(静态库)已成功构建。
问题是在构建项目2时,它说项目1中的库中的那些Lua函数是未定义的,这里是部分错误消息:
g++ -o bin/Release/BattleConsoleCB obj/Release/main.o -s
../BattleConsole/libBattleCore.a
../BattleConsole/libBattleCore.a(DataLoader.o):
In function `boolDataLoader::GetNumber<double>(char const*, double&) [clone .isra.5]':
DataLoader.cpp:(.text+0x13): undefined reference to `lua_settop'
DataLoader.cpp:(.text+0x1e): undefined reference to `lua_getglobal'
DataLoader.cpp:(.text+0x2b): undefined reference to `lua_isnumber'
DataLoader.cpp:(.text+0x3e): undefined reference to `lua_tonumberx'
DataLoader.cpp:(.text+0x51): undefined reference to `lua_settop'
请注意,“DataLoader.cpp”来自项目1,应该已在应该已嵌入了Lua的静态库“libBattleCore.a”中构建。
如何解决这个问题?谢谢你的帮助。
附加信息:
项目2应包括: "libBattleCore.h", "main.cpp", libBattleCore.a
项目1: CodeBlock构建选项已在编译搜索目录中包括"Lua/install/include",链接搜索目录中包括"Lua/install/lib"
相同的代码已在Win上成功构建和运行,使用的是VS2012
如果需要其他任何信息,请告知,我会添加的。
我是一个对Linux和g++还很生手的人。 :-(
谢谢
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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中获取用户配置主目录的跨平台方法
我没有50个声望值就不能评论。没有匿名回复的支持。所以在这里发布是我唯一能做的。
可能已经过了几年,但是我认为用g++,你在命令行上列出.o文件,在库中使用**-L指定要搜索的目录,然后使用-lname来包含库。(其中name缺少前缀lib和后缀.a**)。例如: -L../BattleConsole -lBattleCore
哦,而**-lfoo -lbar与-lbar -lfoo**的顺序是关键的,决定了哪个库可以使用另一个库中的代码。
并不清楚静态库是否一定包含其他库的代码。您可能需要按照正确的顺序链接(来自project1的库)。
尝试使用 "nm"。如 nm --demangle libBattleCore.a | grep ... 这将让您查看每个库中包含的内容。 man nm 或者http://linux.die.net/man/1/nm 可以帮助您弄清楚字母的含义。例如,U是未定义的(已使用但未提供)。T在文本(代码)段中定义。W 和 V是弱定义的。等等。