lua链接dll的问题

来源:互联网 发布:烘焙论坛知乎 编辑:程序博客网 时间:2024/04/29 22:24

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搜索库的路径。脚本内容如下:

[plain] view plaincopy
  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)的工作目录下搜索的。


原文:http://blog.csdn.net/yanjun_1982/article/details/8951890

0 0