Lua5.2 请求 luasocket 相关模块时的 multiple-lua-vms-detected
2016-07-17 23:54
288 查看
记录:
http://blog.csdn.net/immortal_steller/article/details/46365715
首先说一下5.3貌似没有这个问题, 但是目前最新版的luasocket 3.0 rc1只能支持5.2, 5.3调用的话程序会崩溃(不知道是不是我没配置好)
出现这个问题的原因, 想必网上有很多资料了, 就是C model的静态和动态链接的问题, lua5.2不支持 >= 2的静态链接, 而如果在编译得到lua.lib的时候用了静态链接,
编译得到socket.dll 和 mime.dll的时候链接了它, 那么在命令行解释的时候, 相当于链接了两次, 就会出现这样的错误.
很可惜, 现在网上大多数是linux下的解决方案, 好不容易遇到一两个windows下的又不知所云, 于是我自己摸索出了一套方案, 编译工作交给了VS2012.
_CRT_SECURE_NO_WARNINGS
LUA_BUILD_AS_DLL
这两项.
然后重新生成项目就可以得到dll和lib了.
然后将配置类型改回exe, 生成项目得到解释器文件lua.exe.
有需要的话可以移除lua.c, 加入luac.c得到编译器.
将lua.exe 和 lua.dll放在同一文件下就可以使用了.
解决方案中包含了mime和socket, 他们的配置方式是相同的:
1. 注意配置类型是不是dll, 不是的话改成dll, 然后目标文件名也改改.
2. VC++目录中的包含目录和引用目录需要包含 lua/src文件夹
3. 在链接器中设置相关内容, 使得项目能够链接到刚才生成的lua.lib.
编译以后, 取出两个dll, 以及一些相关的.c.h 放到相应位置就好了.
具体放在哪里呢.........
在lua文件中写一句 http = require("socket.http") 运行, 你就能根据报错知道放哪里了
放的地方可以改, 参考点击打开链接
大概就这样了....可以愉快地写个爬虫去爬一些 '有趣' 的内容了哦呵呵....
http://blog.csdn.net/immortal_steller/article/details/46365715
首先说一下5.3貌似没有这个问题, 但是目前最新版的luasocket 3.0 rc1只能支持5.2, 5.3调用的话程序会崩溃(不知道是不是我没配置好)
出现这个问题的原因, 想必网上有很多资料了, 就是C model的静态和动态链接的问题, lua5.2不支持 >= 2的静态链接, 而如果在编译得到lua.lib的时候用了静态链接,
编译得到socket.dll 和 mime.dll的时候链接了它, 那么在命令行解释的时候, 相当于链接了两次, 就会出现这样的错误.
很可惜, 现在网上大多数是linux下的解决方案, 好不容易遇到一两个windows下的又不知所云, 于是我自己摸索出了一套方案, 编译工作交给了VS2012.
一. 得到lua.dll和lua.lib
首先新建一个vc++空项目, 将 lua/src 中除了luac.c和lua.c的.h.c文件全部导入, 项目 -> 属性设置 将配置类型改为dll, 并且在C/C++ -> 预处理器中加上_CRT_SECURE_NO_WARNINGS
LUA_BUILD_AS_DLL
这两项.
然后重新生成项目就可以得到dll和lib了.
二. 得到解释器
将项目内的文件全部移去, 将lua.c加入, 然后在链接器中设置相关内容, 使得项目能够链接到刚才生成的lib.然后将配置类型改回exe, 生成项目得到解释器文件lua.exe.
有需要的话可以移除lua.c, 加入luac.c得到编译器.
将lua.exe 和 lua.dll放在同一文件下就可以使用了.
三. 编译luasocket相关项目
将luasocket 3.0从github上扒下来以后, 根目录有个Lua52.props, 将其改为Lua.props, 然后直接打开 luasocket.sln解决方案中包含了mime和socket, 他们的配置方式是相同的:
1. 注意配置类型是不是dll, 不是的话改成dll, 然后目标文件名也改改.
2. VC++目录中的包含目录和引用目录需要包含 lua/src文件夹
3. 在链接器中设置相关内容, 使得项目能够链接到刚才生成的lua.lib.
编译以后, 取出两个dll, 以及一些相关的.c.h 放到相应位置就好了.
具体放在哪里呢.........
在lua文件中写一句 http = require("socket.http") 运行, 你就能根据报错知道放哪里了
放的地方可以改, 参考点击打开链接
大概就这样了....可以愉快地写个爬虫去爬一些 '有趣' 的内容了哦呵呵....
相关文章推荐
- lua 语法
- Lua 语言 15 分钟快速入门
- Evaluate Reverse Polish Notation
- evaluate-reverse-polish-notation
- ulua(一)上手
- 《Lua程序设计》第2章 类型与值 学习笔记
- 《Lua程序设计》第1章 开始 学习笔记
- Lua中的注释
- Lua学习笔记 入门的两个小程序
- Leetcode-evaluate-reverse-polish-notation
- Lua教程(四):在Lua中调用C语言、C++的函数
- Lua教程(二):C++和Lua相互传递数据示例
- Lua教程(三):C语言、C++中调用Lua的Table示例
- Lua教程(五):C/C++操作Lua数组和字符串示例
- 和我一起写lua - C和lua的参数传递与返回值
- lua-string-resty的aes加密解密,无法和python的aes进行对接
- ulua经验
- ulua使用经验
- Lua类继承的优雅实现方式
- ulua热更新小demo