在Linux下链接win32 DLL
Reiase
posted @ 2009年9月29日 12:34
in 编程杂项
, 3759 阅读
最近拿到一款IP摄像机,SDK只有win32版本。闲来无聊,就试了试在Linux下调用SDK里的DLL来控制摄像机。
在Linux下调用Windows DLL主要面临两个问题:
- DLL的加载。DLL可执行文件格式与Linux下的so文件格式类似,wine与mplayer等程序都是可以加载dll。为了实现方便,我们借助wine来加载DLL
- DLL中函数会进行windows系统调用,或者调用其他windows库。为了避免麻烦,我们也让wine处理这些调用
利用wine,仅需三步即可链接DLL库
- 导出dll文件的spec文件
winedump spec -I. yourlib.dll
该命令生成yourlib.spec文件。可能需要用”-I”添加dll文件对应的头文件目录,不然dll导出的符号,找不到原型,挥别忽略。 - 生成def文件
winebuild –def -E yourlib.spec -o libyourlib.def
这里需要指定def文件名为libyourlib.def,gcc查找库的时候需要lib这个前缀 - 编译程序
winegcc -L. -lyourlib main.c -o main