为C+构建Lua+; 根据Lua Wiki,如果Lua 5.1或以后编译为C++,它将使用C++异常。由于Lua是一个C库,它只引用makefile中的CC。因此,我的想法是将CC重新定义为“g++”,这样我就不必修改makefile make generic CC="g++"

为C+构建Lua+; 根据Lua Wiki,如果Lua 5.1或以后编译为C++,它将使用C++异常。由于Lua是一个C库,它只引用makefile中的CC。因此,我的想法是将CC重新定义为“g++”,这样我就不必修改makefile make generic CC="g++",c++,gcc,lua,g++,C++,Gcc,Lua,G++,我能够毫无问题地构建Lua。但是,现在当我将C++应用程序链接到Lua(静态)库时,我收到许多LUA函数(LuaaCuxListSnpe,LuaAuthPuthOngt等)的未定义的引用错误。 当我使用gcc构建Lua时,我的应用程序链接成功了 make generic CC="gcc" 我是否为C++编译Lua错误?我假设我需要使用G++,因为LuA源代码包含C++处理器的预处理器检查,以确定C++异常是否应该启用。 < P>如我在对原问题的评论中提到的,我在我的C++应用程序中包括了Lua

我能够毫无问题地构建Lua。但是,现在当我将C++应用程序链接到Lua(静态)库时,我收到许多LUA函数(LuaaCuxListSnpe,LuaAuthPuthOngt等)的未定义的引用错误。 当我使用gcc构建Lua时,我的应用程序链接成功了

make generic CC="gcc"

我是否为C++编译Lua错误?我假设我需要使用G++,因为LuA源代码包含C++处理器的预处理器检查,以确定C++异常是否应该启用。

< P>如我在对原问题的评论中提到的,我在我的C++应用程序中包括了LuaHPP。当Lua被编译为C库时,这一点非常有效,因为Lua.hpp撤消了名称损坏:

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>
//使用Lua作为C库
#包括
//使用Lua作为C++库
#包括
#包括
#包括

<代码>你在C++项目中包括哪些Lua头(Lua.h或Lua.HPP)?你用的是extern“C”吗?我用的是lua.hpp。我没有在lua.hpp周围使用extern“C”,因为lua.hpp已经这样做了。我是否应该包括Lua.h(没有外部的C),因为我的Lua库现在是C++库(而不是C库)?代码>外部“C”< /> >避免了由于您的库被构建为C++,需要进行的C++名称修改。听起来像编译的Lua运行时正在使API函数名称被损坏。您能否使用
objdump
nm
检查编译的静态库,并验证名称没有损坏?另请参见