更新
在项目 2(控制台)中使用 -ldl 并链接 liblua.a 后,编译没问题,但是当它运行时,一旦运行 Lua 函数,就会崩溃并出现错误 Segment failure (core dumped)。
<小时/>问题背景:
操作系统:Linux Ubuntu
IDE:代码块
语言:C++
2 个项目:
项目1:使用Lua的静态库;
项目 2:控制台应用程序,使用项目 1 生成的库
问题描述
项目1(静态库)已成功构建。
问题是,在构建项目 2 时,它说项目 1 的 lib 中的那些 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,它应该构建在静态库“libBattleCore.a”中,该库应该嵌入 Lua。
如何解决这个问题?感谢您的帮助。
<小时/>其他信息:
项目 2 应包括:“libBattleCore.h”、“main.cpp”、libBattleCore.a
项目 1:CodeBlockbuilding 选项已在编译搜索目录中包含“Lua/install/include”,在链接搜索目录中包含“Lua/install/lib”
使用 VS2012 在 Win 上成功构建并运行相同的代码
如果还有什么需要请告知,我会添加。
我是 Linux 和 g++ 的新手。 :-(
谢谢
最佳答案
如果没有 50 次代表,我无法发表评论。不支持匿名回复。所以我能做的就是在这里发帖。
已经过去几年了,但是对于 g++,我认为您在命令行上列出的是 .o 文件,对于库,您使用 -L 指定要搜索的目录,然后使用 -lname 包含库。 (名称缺少前导 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 是弱定义的。等等
关于c++ - 在Linux上链接嵌入Lua的静态库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24995505/