关于c调用lua 对‘luaL_newstate()’未定义的引用的问题解决办法

摘要:
#include#include"lua.h"#include"lauxlib.h"#include"lualib.h"intmain(intargc,char*argv[]){charbuff[256];interror;lua_State*L=luaL_newstate();luaL_openlibs(L);while(fgets(buff,sizeof(buff),stdin)!

#include <string.h>#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
int main(int argc, char *argv[])
{
char buff[256];
int error;
lua_State *L = luaL_newstate();
luaL_openlibs(L);
while (fgets(buff, sizeof(buff), stdin) != NULL) {
error = luaL_loadbuffer(L, buff, strlen(buff),
"line") || lua_pcall(L, 0, 0, 0);
if (error) {
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);/* pop error message from the stack */
}
}
lua_close(L);
return 0;
}

最近学习lua脚本,编译上面程序一直如下错误 用g++ a.cpp -o a -llua -ldl

[root@localhost lua+c]# g++ a.cpp -o a -llua -ldl
a.cpp:8: 警告:不建议使用从字符串常量到‘char*’的转换
/tmp/ccij5HeF.o:在函数‘main’中:
a.cpp:(.text+0xe):对‘luaL_newstate()’未定义的引用
a.cpp:(.text+0x24):对‘luaL_openlibs(lua_State*)’未定义的引用
a.cpp:(.text+0x60):对‘luaL_loadbufferx(lua_State*, char const*, unsigned int, char const*, char const*)’未定义的引用
a.cpp:(.text+0x9b):对‘lua_pcallk(lua_State*, int, int, int, int, int (*)(lua_State*, int, int))’未定义的引用
a.cpp:(.text+0xe4):对‘lua_tolstring(lua_State*, int, unsigned int*)’未定义的引用
a.cpp:(.text+0x107):对‘lua_settop(lua_State*, int)’未定义的引用
a.cpp:(.text+0x140):对‘lua_close(lua_State*)’未定义的引用
网上查的说法都是库没有链接成功,折腾了好久,最后在http://blog.csdn.NET/zuijinbuzai/article/details/7385380中找到了答案,

原来是因为lua是C语言模块,用g++调用c语言的库需要在包含头文件时加上extern "C",就能正常编译了,即修改为

extern "C" {
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
};

#include <string.h>
int main(int argc, char *argv[])
{
char buff[256];
int error;
lua_State *L = luaL_newstate();
luaL_openlibs(L);
while (fgets(buff, sizeof(buff), stdin) != NULL) {
error = luaL_loadbuffer(L, buff, strlen(buff),
"line") || lua_pcall(L, 0, 0, 0);
if (error) {
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);/* pop error message from the stack */
}
}
lua_close(L);
return 0;
}

免责声明:文章转载自《关于c调用lua 对‘luaL_newstate()’未定义的引用的问题解决办法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇QMessageBoxAndroid中Ijkplayer最简单的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

采用文件方式安装Python第三方库

由于Python某些第三方库仅提供源代码,通过pip下载文件后无法在Windows系统编译安装,会导致第三方库安装失败。为了解决这类第三方库的安装问题,美国加州大学尔湾分校提供了一个网页,帮助Python用户获得Windows可直接安装的第三方库文件。 1、下载网址https://www.lfd.uci.edu/~gohlke/pythonlibs 2、安...

CentOS terminal 安装 matlab(mode=silent)

1. 下载matlab for Unix 2014 ,需要crack文件 2. 挂载iso文件, mount -o loop,ro Mathworks.Matlab.R2014a.iso /media 3. 将crack中的install.jar 覆盖/media/java/jar下面的install.jar,这步骤必须正确完成 sudo cp Crack...

Centos7离线部署redis集群

  目录 一、安装redis需要的依赖 二、安装redis 三、部署redis集群 一、安装redis需要的依赖 1、安装GCC   1、检查是否安装gcc     命令: gcc  -v     如果能输出gcc版本信息,,说明安装了gcc。反之需要安装gcc   2、安装gcc     2.1创建目录/usr/local/gccSrc     2.2...

python GIL 全局锁,多核cpu下的多线程性能究竟如何?

python GIL 全局锁,多核cpu下的多线程性能究竟如何?GIL全称Global Interpreter Lock GIL是什么? 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。有名的编译器例如GCC,...

《python解释器源码剖析》第0章--python的架构与编译python

本系列是以陈儒先生的《python源码剖析》为学习素材,所记录的学习内容。不同的是陈儒先生的《python源码剖析》所剖析的是python2.5,本系列对应的是python3.7,所以某些地方会和原著有出入,另外我在介绍的过程中会穿插大量的python代码,不仅仅是介绍如何实现的,还会使用python实际地对我们的结论进行演示。下面就开始吧。不过在开始分析...

如何解决 Matlab 画图时中文显示乱码的问题?

使用的是win10系统,从前几个月某一天,我的matlab的figure里的中文都变成了口口。很是郁闷,还以为是动到了什么配置引起的。 前几天更新了matlab 2018b,发现还有这个问题。就觉得不是自身配置引起的。 就去网上搜索了这个问题,发现了不错的解答: 如何解决 Matlab 画图时中文显示乱码的问题? - Bridgoon的回答 - 知乎 这里...