require "socket" 引发的一些问题
来源:互联网 发布:文字复制软件 编辑:程序博客网 时间:2024/06/05 21:52
luasocket 的安装和部署
初学 lua,当读到《lua 程序设计》中9.4节非抢占式(non-preemptive)多线程时,例子中用到了
require "socket"
在我的 lua 环境中,直接使用出错了,因为这是一个外部c的动态库,需要下载编译配置好才能使用。
luasocket 是Diego Nehab 写的,GitHub的地址为 [https://github.com/diegonehab/luasocket ],现在的版本较之前的版本做了一些改动。下面说一下编译和安装的期间的一些问题:
1、 在根目录下有一个 makefile 文件,查看 makefile 文件,发现其实都是进入 src 目录后在进行编译的,具体的编译信息进入 src 中查看 makefile 文件
2、 在src中,makefile 文件显示,luasocket 能够支持的平台有 linux, win32, Solaris, mingw, macosx。如果你是在 linux 中的话,
make linux
即可。但是需要注意,这里依赖需要有 lua.h 等头文件,你需要在 makefile 中修改一下
LUAINC_linux
这个变量的值,即将路径修改为你主机上的目录,不然编译会出错
3、 编译成功后,不会像之前版本中直接编译成功为 socket.so 这样的库文件,生成的库文件为
mime-1.0.3.sounix.soserial.sosocket-3.0-rc1.so
当然,主要关注前两个即可。使用
make install
安装,(这里说明一下,楼主的 lua 是 5.1 版本的),会安装在
/usr/local/share/lua/5.1//usr/local/lib/lua/5.1/
这两个目录中,查看 makefile 文件也能发现
install: $(INSTALL_DIR) $(INSTALL_TOP_LDIR) $(INSTALL_DATA) $(TO_TOP_LDIR) $(INSTALL_TOP_LDIR) $(INSTALL_DIR) $(INSTALL_SOCKET_LDIR) $(INSTALL_DATA) $(TO_SOCKET_LDIR) $(INSTALL_SOCKET_LDIR) $(INSTALL_DIR) $(INSTALL_SOCKET_CDIR) $(INSTALL_EXEC) $(SOCKET_SO) $(INSTALL_SOCKET_CDIR)/core.$(SO) $(INSTALL_DIR) $(INSTALL_MIME_CDIR) $(INSTALL_EXEC) $(MIME_SO) $(INSTALL_MIME_CDIR)/core.$(SO)
这里有一点不同的是,安装的时候,将 unix.so
和 mime-1.0.3.so
命名为 core.so
,因为在 socket.lua 文件中,使用的是 require "socket.core"
require 是如何查找库文件的呢
查看 lua 手册 [http://www.lua.org/manual/5.2/manual.html#6.3 ]
lua 中,package 库为加载模块提供了所有基础方法,所有信息保存在表 package 中。
require(modulename)
首先,lua会先在 package.loaded
表中查找是否该模块已经加载,如果已经加载过了,直接返回保存在该表中的信息 package.loaded[modulename]
。如果没有,lua 会试图为该模块找一个加载器(loader),首先在 package.preload
表中查找模块,是否有 package.preload[modulename]
,如果有,就以该函数作为加载器。如果没有,lua 会尝试从 lua 文件或者 c 文件中加载该模块。根据 package.path
查找 lua 文件,否则,继续根据 package.cpath
查找 c 文件。
Lua 用于搜索 lua 文件的路径存储在 package.path
中,lua 启动之后,就会以环境变量 LUA_PATH 来初始化这个变量,如果没有找到这个环境变量,那么会使用编译时定义的默认路径来初始化。
当Lua无法找到与模块名相符合的 lua 文件时,就会查找 c 程序库。查找c程序库的路径存储在 package.cpath
中,这个变量视通过环境变量 LUA_CPATH 来初始化的。
所以,当在环境中安装好 luasocket 的时候,使用
require "socket"
仍然出现
./socket.lua:12: module 'socket.core' not found
的错误时,在之前先配置一下 package.path
和 package.cpath
即可
package.path = "/usr/local/share/lua/5.1/?.lua"package.cpath = "/usr/local/lib/lua/5.1/?.so"
- require "socket" 引发的一些问题
- Socket引发的死锁问题。
- require或include相对路径多层嵌套引发的问题
- require或include相对路径多层嵌套引发的问题
- socket的一些问题
- 由 EditorBrowableAttribute 引发的一些问题
- 计算数组长度引发的一些问题
- duplicate symbol问题引发的一些知识
- 经典面试问题引发的一些想法
- 关于socket的一些问题
- 从文档的编写问题引发的一些思考
- VC6.0升级至VS2005 引发的一些问题
- 关于myeclipse引用tomcat7引发的一些问题
- 求最大公约数和最小公倍数引发的一些问题
- iOS 第三方库引发的一些尴尬问题
- 打开系统相册并裁剪,而引发的一些问题
- PHP:由一些小问题引发的思考
- strncpy拷贝问题而引发的一些讨论
- 河南省第十届acm省赛-最小秘钥——个人c++解
- JavaScript基础
- word文档中如何让正文分栏但是脚注不分栏
- java并发编程-1.1线程的创建方法及比较
- Qt之定时器、重绘窗口、窗口缩放、截屏、截图
- require "socket" 引发的一些问题
- 音频单元组件服务参考(Audio Unit Component Services Reference)
- EA&UML日拱一卒--序列图(Sequence Diagram)::门
- Doves and bombs UVA
- 内核资料:ALSA资料
- android用视频当做背景
- 算法——图之有向图
- 本地的vs项目设置成带域名的项目
- Homebrew 换源