zoukankan      html  css  js  c++  java
  • Lua5.2 请求 luasocket 相关模块时的 multiple-lua-vms-detected

    首先说一下5.3貌似没有这个问题, 可是眼下最新版的luasocket 3.0 rc1仅仅能支持5.2, 5.3调用的话程序会崩溃(不知道是不是我没配置好)


    出现这个问题的解决办法, 想必网上有非常多资料了, 就是C model的静态和动态链接的问题, lua5.2不支持 >= 2的静态链接, 而假设在编译得到lua.lib的时候用了静态链接, 

    编译得到socket.dll 和 mime.dll的时候链接了它, 那么在命令行解释的时候, 相当于链接了两次, 就会出现这种错误.


    非常可惜, 如今网上大多数是linux下的解决方式, 好不easy遇到一两个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") 执行, 你就能依据报错知道放哪里了
    放的地方能够改, 參考点击打开链接

    大概就这样了....能够愉快地写个爬虫去爬一些 '有趣' 的内容了哦呵呵....
  • 相关阅读:
    自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图
    自己动手丰衣足食之 jQuery 数量加减插件
    Asp.net 中,在服务端向客户端写脚本的常用方法
    Asp.Net使用加密cookie代替session验证用户登录状态 源码分享
    Javascript技术之详尽解析event对象
    Javascript的V8引擎研究
    11个实用的CSS学习工具[转载收藏]
    为什么JavaScript声明变量的时候鼓励加var关键字
    asp.net菜鸟到中级程序员的飞跃 --30本好书点评
    创建安全的ashx文件,ashx编译
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8479825.html
Copyright © 2011-2022 走看看