链接Linux上嵌入Lua的静态lib时出错

Error of linking a static lib embedded with Lua on Linux

本文关键字:静态 lib 出错 Lua Linux 链接      更新时间:2023-10-16

更新

在Project 2中(控制台(使用-ldl和链接liblua.a后,编译是可以的,但当它运行时,它在运行Lua函数时就崩溃了,并出现错误Segment fault(核心转储(。


问题背景:

  • 操作系统: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包含库。(其中name缺少前导的lib和尾随的.a。(例如-L/BattleConsole-lBattleCore

哦,-lfo-lbar-labar-lfo的排序至关重要,这决定了哪个库可以使用另一个库的代码。

目前还不清楚静态库是否需要包含其他库中的代码。您可能需要(按照正确的顺序(链接到project1中的库。

尝试"nm">。就像在nm中一样——解谜libBattleCore.a|grep这将让您看到每个库中到底包含了什么man nm或http://linux.die.net/man/1/nm可以帮你弄清楚字母代表什么。例如,U是未定义的(由使用,未提供(T在文本(代码(段中定义WV是弱定义的。等等