lua入手

    继续lua,

    今天要用lpeg(Peg 的lua实现),写了个demo,打算跑一下官方文档的例子,

    1. 下载了lpeg的源代码,只有一个c文件和一个makefile,于是make一下,不用install。

    2.lua调用c函数时,只要将这些c函数封装成一个动态链接库,so/dll,然后在lua文件中直接require(除so后的文件名)即可(当然c文件还是要添加一些处理)

    比如require "lpeg"

    还有今天遇到了一个小问题,require时出现too many c levels的错误。原来是我的lua文件(lpeg.lua)与so文件(lpeg.so)文件名对于lua来说是相同的,而require时lua文件的优先级更高,因此就会出现一个自己require自己,出现无穷递归定义的问题。

    看看lua require库时文件引用的规则:lua可以在lua文件中require一个本来不存在的库 ,如require"lpeg1",打印出来的错误:

lua: testlpeg.lua:1: module 'lpeg1' not found:
	no field package.preload['lpeg1']
	no file '/usr/local/share/lua/5.2/lpeg1.lua'
	no file '/usr/local/share/lua/5.2/lpeg1/init.lua'
	no file '/usr/local/lib/lua/5.2/lpeg1.lua'
	no file '/usr/local/lib/lua/5.2/lpeg1/init.lua'
	no file './lpeg1.lua'
	no file '/usr/local/lib/lua/5.2/lpeg1.so'
	no file '/usr/local/lib/lua/5.2/loadall.so'
	no file './lpeg1.so'
可见规则:

1. 先遍历所有可能的lua文件:当前目录,还有几个linux库目录

2. 再遍历so文件:先是linux库目录,然后才是当前目录(为什么???)


另外,今天还发现一个问题:我是先用apt安装了lua5.1再用源代码安装了5.2,用脚本方式(#! /usr/bin/env lua)启动时是用5.1,但用lua命令启动时是5.2,待解决!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值