关于c调用lua 对‘luaL_newstate()’未定义的引用的问题解决办法
#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()’未定义的引用的问题解决办法的更多相关文章
- c语言中在引用math库后,编译出现错误(.text+0x9c):对‘sqrt’未定义的引用的解决办法
写于2016年11月29日晚. 原因是gcc编译器没有引用默认的math库,需要在执行编译命令时加上-ml.例如: gcc 源文件 -ml -o 编译后文件名 或者 gcc 源文件 -lm -o 编译 ...
- 从架构层面杜绝lua中使用未定义的变量
# 从架构层面杜绝lua中使用未定义的变量 标签(空格分隔): lua --- lua中有一个很坑的地方:1.就是如果一个变量拼写错误,会自动的认为你定义了一个值为nil的全局变量.2.如果在func ...
- 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
从官网上下载5.3.2的源码后,make linux进行编译,提示报错: gcc -std=gnu99 -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline ...
- gcc编译时对'xxxx'未定义的引用问题
gcc编译时对’xxxx’未定义的引用问题 gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没 ...
- (原)编译caffe时提示未定义的引用(undefined reference to)
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5864715.html 参考网址: https://github.com/BVLC/caffe/issu ...
- 关于pthread_create未定义的引用的奇葩解决
1本来在代码里包含了pthread.h 第一次编译:gcc -o create create.c 提示错误 未定义的引用 2后来知道linux标准库没有pthread.h 要链接之-lpthrea ...
- oci7编译报’olog’等未定义的引用问题
前一天在测试一个数据导出的时候,发现oci7编译的时候报了一大堆类似"’oparse’未定义的引用问题",这通常是因为找不到实现库的原因,但是oci相关的库又都是存在的,用oci7 ...
- 【转】 g++编译时对'xxxx'未定义的引用问题(undefined reference to)
转自:https://blog.csdn.net/killwho/article/details/53785910 引用:http://www.linuxdiyf.com/linux/16754.ht ...
- gcc编译时对’xxxx’未定义的引用问题
gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行 ...
随机推荐
- Codeforces Round #455 (Div. 2) 909E. Coprocessor
题 OvO http://codeforces.com/contest/909/problem/E CF455 div2 E CF 909E 解 类似于拓扑排序地进行贪心, 对于 Ei=0 并且入度为 ...
- 给程序添加git commit信息
遇到了一个客户程序出问题,自己这边始终无法重现的bug.为了检查问题,查到了一个添加git的commit信息到程序中的方法,感觉对程序版本控制十分好用. 一,项目中添加如下文件 文件结构: GitVe ...
- [Hihocoder] 字符串排序
题目 http://hihocoder.com/problemset/problem/1712 题解 https://www.zybuluo.com/wsndy-xx/note/1135606
- jQuery系列(五):jQuery操作input的value值
表单控件是重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等. jQuery操作表单控件的方法: $(selector).val()//设置值和获取值 1.实例代码 ...
- 理解TCP三次握手和四次挥手
TCP相关知识 TCP是面向连接的传输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协 ...
- Manjaro XFCE 设置分辨率1920*1080
#查看系统显示器名称 xrandr #自定义cvt 1920 1080 #设置分辨率xrandr --newmode "1920x1080_60.00" 173.00 1920 2 ...
- Linux 删除文件夹和文件的命令(强制删除包括非空文件)
linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就 ...
- iptables 有关计算机名解析问题
遇到一奇怪现象: 1.开启防火墙(iptables)所有的用计算机名解析的连接全部是失效,但是用IP的一切正常.ping计算机名不通.但是ping IP地址一切OK: 2.关闭防火墙(iptables ...
- RHSA-2018:0014-重要: linux-firmware 安全更新
修复命令: yum update iwl2030-firmware yum update iwl5000-firmware yum update iwl100-firmware yum update ...
- layer.js错误Uncaught TypeError: i is not a function
最初是要写一个管理后台来着,项目中需要用到弹出层,但是没有前端配合,我一个小PHP需要去写这玩意,怎么办呢?查了一些资料,发现layer对我来说还行,文档写的也比较完全,学习成本不高,就下决心用这个了 ...