使用 Lua "Undefined reference to"
"Undefined reference to" using Lua
当我试图构建我的项目时,我得到了错误undefined reference to 'luaL_newstate'
。我知道这是一个错误的链接器,但我是相对较新的Lua和添加一个库到一个项目。顺便说一下,我使用Code::Blocks。API函数luaL_openlibs
、luaL_loadfile
、lua_pcall
、lua_getfield
、lua_type
、lua_settop
也缺失。
我在一个网站上看到,为了解决这个问题,我必须将我的项目与libdl链接起来,但我真的不知道这是什么意思,也不知道怎么做。
我遇到了同样的问题,在我的情况下,我在这里找到了一个解决方案。基本上包括将lua的#include s包装在extern "C"中,如:
extern "C"{
#include <lua5.2/lualib.h>
#include <lua5.2/lauxlib.h>
#include <lua5.2/lua.h>
}
当您第一次尝试编译Lua时,它可能有点复杂。你引用的网站是正确的:当链接Lua时,libdl是非常必要的。
我面前没有Code:: block,所以我不能告诉你你需要添加什么选项。它应该是一个"命令行选项"或"编译器选项"的列表。如果从命令行编译,完整的命令如下所示:
gcc -o sample sample.c -llua -ldl
注意-l选项在库名前没有空格。在Code::Blocks中应该有一个选项来添加你自己的编译时选项或编译器标志。您可以将"-llua"answers"-ldl"添加到该选项列表中。或者,您也可以自己从命令行执行。
libdl是在动态链接其他库到程序时使用的库。您必须将其添加到Lua中才能正确链接。
正如公认的答案所提到的,这些标头缺少extern "C"
。另一种方法是包含已安装的 Lua .hpp,它已经使用extern "C"
来包装这些Lua头文件。
// lua.hpp
// Lua header files for C++
// <<extern "C">> not supplied automatically because Lua also compiles as C++
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 不断"Attempting to reference a deleted function"
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- Libcurl c++ "undefined reference to" (Windows/MinGW/g++)
- 尝试使用 extern "C" 调用 C 中的C++方法,得到"undefined reference to"对象的链接器错误
- 与映射和unordered_map相关的编译错误:"attempting to reference a deleted function"
- 将 QMutex 添加到类后的"Attempting to reference a deleted function"
- 多级继承错误 C2280:"atttempting to reference a deleted function"
- static_cast int to reference to int?
- C++:具有 const int 的类的 vector.erase 实例给出"attempting to reference a deleted function"错误 C2280
- "attempting to reference a deleted function"函数参数
- 错误 "Attempting to reference a deleted function" - 传回 unique_ptr 的值时
- 尝试使用 std::bind 重新分配 std::function 并得到错误"attempting to reference a deleted function"
- 我怎么知道"C2280 - attempting to reference a deleted function"发生在哪里?
- "Attempting to reference a deleted function"