分享

lua链接dll的问题

 quasiceo 2014-01-17
分类: LUA 2013-05-20 19:33 466人阅读 评论(0) 收藏 举报

lua可以链接专门为lua写的dll,用require就可以了。但有个小地方是需要注意的。有场景如下:

1.有一个脚本require.lua,它放在script目录下。

2.有两个dll:test.dll,lua.dll,test.dll依赖于lua.dll,它们放在bin目录下。

3.script与bin是同级目录。


为了使require.lua可以链接test.dll,在脚本要中修改lua搜索库的路径。脚本内容如下:

  1. package.cpath = "..\\bin\\?.dll"  
  2. require "test"  

运行脚本,却有以下报错:error loading module 'test' from file '..\bin\test.dll'
这个报错并不是说没有找到test.dll,而是在加载test.dll的时候出错了,只有两种可能,第1种是lua加载test.dll时有问题,第2种是test.dll的格式并不是可以给lua链接的那种,比如导出的函数名不对(要求导出的函数名为:luaopen_xxxx)。
后者是很容易排除的,看下代码确认下就可以了。那就只能是第1种可能。
但是test.dll看起来也很正常,它所依赖的lua.dll也没什么问题......
等等,test.dll依赖lua.dll?那会不会是这里出问题了呢?虽然test.dll和lua.dll是同一个目录,但require.lua和lua.dll不是同一个目录啊。
把lua.dll复制到script目录下,让它与require.lua在同一个目录,运行脚本,结果正常了,没有报错。
其实到现在我也不是很了解dll的链接机制,我以为A依赖于B,就把AB放一起就好了,其实不然。
看来设定package.cpath只是设定了A的搜索路径,A所依赖的dll还是在主程序(这里是require.lua)的工作目录下搜索的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多