在项目2(控制台)中使用-ldl和链接liblua.a后,编译没问题,但是当它运行时,一旦运行Lua函数就崩溃并出现错误Segment fault(core dumped)。
操作系统:Linux Ubuntu
IDE:CodeBlock
Launguage:C ++
2个项目:
项目1:使用Lua的静态lib;
项目2:控制台应用程序,使用Project 1生成的库
Project 1(静态lib)已成功构建。
问题是,在构建项目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'
请注意&#34; DataLoader.cpp&#34;来自项目1,它应该是在静态库中构建的;#lib; libBattleCore.a&#34;应该嵌入Lua。
如何解决问题?谢谢你的帮助。
项目2应包括:&#34; libBattleCore.h&#34;,&#34; main.cpp&#34;,libBattleCore.a
项目1:CodeBlockbuilding选项包括&#34; Lua / install / include&#34;在编译搜索目录和&#34; Lua / install / lib&#34;在链接搜索目录
相同的代码已成功构建并在Win with VS2012上运行
如果需要其他任何内容,请告知,我会添加。
我是linux和g ++的绿色手。 : - (
谢谢
答案 0 :(得分:0)
没有50个代表,我无法发表评论。不支持匿名回复。所以我可以在这里发帖。
已经有几年了,但是使用g ++,我认为你在命令行中列出了.o文件,而你使用的库 -L 指定了要搜索的目录,然后< strong> -lname 以包含库。 (名称缺少前导 lib 并且尾随 .a 。)例如。 -L ../ BattleConsole -lBattleCore
哦, -lfoo -lbar vs -lbar -lfoo 的顺序至关重要,确定哪个库可以使用另一个库中的代码。
不清楚静态库是否必须包含来自其他库的代码。您可能需要(以正确的顺序)链接到project1的库。
尝试“nm”。与 nm --demangle libBattleCore.a |中一样grep ... 这将让您了解每个库中包含的精确内容。 man nm 或http://linux.die.net/man/1/nm可以帮助您弄清楚这些字母的含义。例如, U 是未定义的(未提供使用)。 T 在文本(代码)细分中定义。 W 和 V 是弱定义的。等