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下的解决方案, 好不容易遇到一两个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") 运行, 你就能根据报错知道放哪里了

放的地方可以改, 参考点击打开链接

大概就这样了....可以愉快地写个爬虫去爬一些 ‘有趣‘ 的内容了哦呵呵....

时间: 2024-10-10 12:23:08

Lua5.2 请求 luasocket 相关模块时的 multiple-lua-vms-detected的相关文章

JPDA 架构研究20 - JDI的事件请求和处理模块

引入: 上文主要讲解了JDI的连接模块来建立Debugger到Target VM之间的连接,这里主要讲解事件请求和处理模块.它们都在com.sun.jdi.event和com.sun.jdi.request包中. 分析: Part 1:查看JDI中定义的事件类型 JDI中事件的接口叫Event . public abstract interface Event extends Mirror {   public abstract EventRequest request(); } 它定义了18种

2、NS3-目录结构和相关模块

Waf是基于Python开发的编译工具,ns-3系统本身和将要写的仿真代码都由waf负责编译运行. Scratch目录一般存放用户脚本文件,也可以把要运行的例子拷贝到该目录下. Example是ns-3提供的关于如何使用ns-3的例子,包含许多模块的使用. Doc目录是帮助文档,可以使用./waf --doxygen编译本地Doxygen文档. Build目录是ns-3编译目录,包含编译文件时使用的共享库和头文件(build/ns3). Src是ns-3源码目录. 模块里面的wscript文件结

ansible 软件相关模块,剧本

软件相关模块 yum rpm和yum的区别 rpm:redhat package manager yum 可以解决依赖关系 yum 源配置 使用yum下载时需要先下载epel [epel] name=Extra Packages for Enterprise Linux 7 - $basearch #名字 baseurl=http://mirrors.aliyun.com/epel/7/$basearch #rpm源的地址,可以写http,https,ftp,Samba,file: failov

ElementUI项目请求SpringBoot后台项目时提示:Access to XMLHttpRequest at **from origin ** has been blocked by CORS policy

场景 搭建ElementUI前端项目后提示: Access to XMLHttpRequest at **from origin ** has been blocked by CORS policy 这是因为在请求后台SpringBoot接口时出现了跨域请求问题. 本来打算是搭建好前端项目后再js中进行ajaxq请求数据,但是会因为跨域被拒绝. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与

(转)VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“

中调试项目遇到错误提示,Visual Studio 2010(或VS2008或VS2005)启动调试的时候,弹出提示信息: 生成下面的模块时,启用了优化或没有调试信息: C:\WINDOWS\Microsoft.NET\Frameword\v2.0.50727\Temporary   ASP.NETFiles\3cmarket\bfbd519\8aA985a18\assembly\dl3\4051c514\d0da2e40_ba3ec701\Adcontrol.DLL若要调试此模块,请将其项目生

F5 iRules-----http请求400/500错误时,重置

#  400/500错误重试 # #当服务返回400/500状态且当前pool中有存活的node重置http请求,并重新选择pool中的node. #直到返回正常代码或者轮询完所有存活node后,接受新的http请求 when CLIENT_ACCEPTED { set retry 0 } when HTTP_REQUEST { set http_request [HTTP::request] } when HTTP_RESPONSE { if { ([HTTP::status] starts_

命令行执行python模块时提示包找不到的问题

庄稼人不是专职python开发的道友,虽然与python相识已多年,可惜相识不相知,只是偶尔借助pydev写一些简单的小工具. 多年来,一直困惑于这样一个问题:同样的工程,同样的代码,使用pydev可以运行任意一个python脚本,而使用命令行运行却不行?命令行下(或者双击执行)总是提示"ImportError: No module named xxx"?pydev究竟做了什么魔术呢? 长话短说,以上面工程为例,如果是在命令行中直接执行 python c.py , 都会提示"

python安装markupsafe模块时卡死的解决办法

起因: 升级OS X从10.8到10.9,会发现在安装python的markupsafe模块时一直卡住. 当时的机器环境是: OSX 10.9, XCode 4.6.2, Python 2.7.6, Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn) 界面一直停留在下面的情况 mbp:MarkupSafe-0.23 $ python setup.py install running install running bdis

vs2010调试的时候出现?“生成下面的模块时,启用了优化或没有调试信息”

vs2010调试的时候出现 生成下面的模块时,启用了优化或没有调试信息: C:\WINDOWS\Microsoft.NET\Frameword\v2.0.50727\Temporary ASP.NETFiles\3cmarket\bfbd519\8aA985a18\assembly\dl3\4051c514\d0da2e40_ba3ec701\Adcontrol.DLL 若要调试此模块,请将其项目生成配置更改为"调试"模式.若要取消显示此消息,请禁用"启动时若没有用户代则发出