根据Lua Wiki,如果将Lua 5.1或更高版本编译为C ++,它将使用C ++异常。由于Lua是一个C库,它只引用makefile中的CC。所以,我的想法是将CC重新定义为“g ++”,所以我不必修改makefile。
make generic CC="g++"
我能够毫无问题地构建Lua。但是,现在当我将C ++应用程序链接到Lua(静态)库时,我收到许多Lua函数(lua_checklstring,lua_pushinteger等)的未定义引用错误。
当我使用gcc构建Lua时,我的应用程序链接成功。
make generic CC="gcc"
我是否错误地编译Lua for C ++?我假设我需要以某种方式使用g ++,因为Lua源代码包含对cplusplus的预处理器检查以确定是否应该启用C ++异常。
答案 0 :(得分:2)
正如我对原始问题的评论中提到的,我在我的C ++应用程序中包含了lua.hpp。当Lua被编译为C库以来,这很有效,因为lua.hpp undos name mangling:
lua.hpp:
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
正如@EtanReisner所指出的,当使用Lua作为C ++库时,我不需要撤消名称修改。所以解决方案是简单地包含实际的Lua头,而不是lua.hpp
// Using Lua as a C library
#include <lua.hpp>
// Using Lua as a C++ library
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>