lua51.dll,lua51.lib 和 lua5.1.dll 和lua5.1.lib 的区别

转载 2012年03月30日 00:20:04

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

讨论新闻组及文件

    今天下载lua的Windows二进制发布luabinaries 的时候,发现luabinaries的发布包含两个dll,lua5.1.dll,lua51.dll,其中lua5.1.dll大小合适,lua51.dll只有11K,感觉不像是个有用的lua dll,对此比较不解,查看了luabinaries的文档,
文档中如此解释:
The LuaBinaries DLL packages have a dll proxy called "lua51.dll". It can be used to replace other "lua51.dll" released by other distributions. It will simply forward calls to the "lua5.1.dll". There is no compiled source code involved in the forwarding.
也就是说,lua51.dll完全是一个lua5.1.dll的代理类,没有任何实际的代码,仅仅是做一个到lua5.1.dll的forwarding。
    不过文档解释了lua51.dll是什么,却没有解释为啥会需要一个这样的东西呢?我还从来没有见过类似的情况。要说有一点点类似的情况的话,也是以前做反外挂的时候,知道可以通过替换现有的dll,并且完全模拟原来dll的接口,并将不需要hack的函数全部forwarding到原来的dll中。对于lua怎么会需要这样的功能呢?
于是我google了一下,发现了原因:
The standard DLL name "lua51.dll" has been selected more than
three years ago. Around twice every year someone comes along and
thinks "Oh, we absolutely need a dot in the DLL version number".

Alas, Windows does not like an extra dot in there. Many things
break when you have an extra dot in DLL names. Depends on the
version of the OS, on the specific system call, on the library or
tool used ... it's hopeless. So please let's forget about it.

--Mike
来自lua-users.org的一个帖子 。
原来是3年前有人确定了一个lua51.dll名字的动态库,并且,有人觉得我们非常需要在5和1之间加一个点,不然lua的5.1版岂不是看成lua的51版了?
对此,有人进一步提出了疑问 ,认为这个问题怎么这么久了竟然没有人修复?
接着有人回答了:
But who's duty is to resolve the issue?

It's clearly not an issue of Lua as a language. It's just a consequence of (a very popular) LuaBinaries once releasing lua5.1.dll that became a de facto binary standard, then authors of many third-party Lua libraries were releasing binary packages compatible with LuaBinaries. 
Note: I'm not blaming LuaBinaries; that was just one unfortunate decision that is difficult to be undone. --
Shmuel

我们知道了:
LuaBinaries做出了一个错误的决定,但是已经发布了,很多第3方的库也发布了,并且依赖于LuaBinaries的这个lua51.dll,于是:
that was just one unfortunate decision that is difficult to be undone. 
那仅仅是一个过去做下,现在难以撤销的不幸决定。。。。。。。。。。。。


    有的东西存在了,即使是不合理的存在,因为它存在了一段时间了,因为惯性,它还会存在在那里。编程中,这种情况经常出现。突然让我想起上个项目中,大家经常对项目中蹩脚代码存在原因的解释:“历史原因”。
    对于代码来说,即使大家都知道可以重构,但是重构是有代价的,很多时候大家就妥协在历史原因当中。
    对于语言来说,C++就是对历史进行最大妥协而产生的语言,大家都承认,假如当年C++不兼容C的话,C++根本就得不到现在这样的流行程度,也都承认,因为C++兼容C,(常常被称为历史的包袱)C++在语言的优美程度上损失了太多。
    想起国内某个大牛有过类似的感慨,“现在每做一个设计决定的时候都非常小心,因为那可能会被使用非常非常长的时间,当它还能正常工作的时候,甚至不会有人想要去重写它“
    呵呵,仅仅将这个有趣的事件作为编程中的一个轶事来看吧。


 

 

 

 

原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

举报

相关文章推荐

luarocks 库windows 安装使用

LuaSocket 这个是Lua扩展库添加的程序,具体可以百度一下,在linux环境中他是比较容易安装和使用的,今天研究了一下在windows安装, 发现比较麻烦,所以先记录一下! 这是官方下载...

lua51.dll,lua51.lib 和 lua5.1.dll 和lua5.1.lib 的区别

今天下载lua的Windows二进制发布luabinaries 的时候,发现luabinaries的发布包含两个dll,lua5.1.dll,lua51.dll,其中lua5.1.dll大小合适,lu...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

用proxychain解决luarocks install无法安装包的问题

这个问题本质是G。F。W。都懂的。。。 错误提示通常是Error: no results matching query were found. 解决方法: 外部打开shadowsocks,启动代...

fatal error LNK1104: 无法打开文件“lua51.lib”

【问题场景】:C++与Lua通信 开发环境: VS2012 " 项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖项 " 中加入 lua51.lib " 项目 → 属性 → 配置属性 →...

lua5.1.lib缺失的解决方案

LINK : fatal error LNK1181: 无法打开输入文件“lua5.1.lib” VS编译自己的项目时,出现了这个错误时,解决方案: 1、下载lua:http://www.lua.o...

编译lua的库和解释器

如何一次性编译lua的库和解释器呢?下面我来说说我的编译步骤: (1)在命令行下使用编译器 我是默认将VS 2008装在C盘的,下面添加相关路径时,请注意你的路径是否和我的一致。 首先添加环境变...
  • iduosi
  • iduosi
  • 2012-08-20 15:02
  • 4878

lua入门之三:lua调用c/c++库(动态链接方式)

dll通过函数luaL_openlib导出,然后lua使用package.loadlib导入库函数,基本就是这么个过程,下面上代码来说明一切。 // libforlua.cpp : 定义 DLL ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)