QT Creator (Mingw 编译器) 调用 VS (C++库) 的方法
作者:孙宇
QQ:1064010391
时间:2015/9/18
地点:德国汉堡
参考:http://wenku.baidu.com/view/b4461fd0b9f3f90f76c61b4e.html
是不是在使用 Mingw 版 QT Creator 时会发现有些 VS 编译的库没法用?无奈之下只能改用
臃肿的 VS 来继续工作?本人喜欢 QT 的小清新,故在网页上翻来覆去了很久,找到了如何
用 Mingw 调用 VS 编译库的解决方案,在此共享给广大网友~
Step 1. 下载 Mingw (http://sourceforge.net/projects/mingw/?source=directory)
Step 2. 安装后会出现如图所示界面
Step 3. Basic Setup 这栏里的视需求选择,不会挑就都勾上吧!之后点开 All Packages 栏,选
择 mingw32-pexports bin 这一项,如图所示
Step 4. 点击左上角 Installation 选择 Update Catalogue 等待,结束后关闭即可
Step 5. 添加环境变量路径,不会的小伙伴自行百度,这个很简单
Step 6. 开始之前我们还需要确保系统中有 c++filt.exe cat.exe 以及 undname.exe 当然了,这
不是必须的,可在我网盘下载(http://pan.baidu.com/s/1dDk8WIP 提取码 w9er)
%---------------------------------
作者以 Leap Motion SDK 中的 Leap.dll 为例说明如何用 Mingw 版 QT Creator 调用 VS 编译出
的动态链接库 (仅需要 dll 就好)
Step 7. 请开始前对着你身边坐着的人无耻的卖个萌!o(∩_∩)o
Step 8. 按住 shift 键,在你需要处理的 dll 所在文件夹单机鼠标右键,点击在打开命令窗口
Step 9. 鼠标右键图中黄点点处选属性,并勾选快速编辑模式,其它默认不变
Step 10. 在光标后敲入或复制 (复制操作在将内容 ctrl+c 后,在黑框框中点击鼠标右键即可)
pexports Leap.dll -o > Leap.def 后回车 (Leap 请替换成你自己的 dll 名字)
Step 11. 运行你的代码,如作者所遇见,此代码用 VS 编译器一点问题没有,但是换做了
Mingw 编译器后就报 undefined reference to 的错
Step 12. 编译一下,在 debug 或 release 目录下找到*.o 文件,稍微了解 Creator 的人应该都不
会陌生,这块就不细说了。作者的类名是 LMTrack,所以我的文件为 lmtrack.o
Step 13. 回到刚才操作 dll 的目录,把*.o 文件考过来 (你也能看到刚才新生成的.def 文件)
Step 14. 继续在 cmd 中输入 nm -s lmtrack.o > func.txt (自己替换 lmtrack 和 func 名字)
Step 15. 将百度云盘下载的三个文件 (若没下载,那你只能凭经验改 def 文件了) 置于 dll 的
同一目录中,并继续在 cmd 中输入 cat func.txt | c++filt > ref.txt (自己换名字)
Step 16. 为了查找方便,作者将 14 与 15 步生成的 txt 分别复制进了 excel 里 (不是必须) ,
用写字板打开 def 文件,准备修改
Step 17. 因为 Leap Motion 导出的东西比较多,所以作者的写字板里很满,作者以修改其中
一个函数为例进行说明,图中红框框处是导出编号
Step 18. 其实这种码看多了也就知道什么意思了,不过本篇文章是面向新手的,所以别急,
我来告诉你如何去读,在 cmd 中键入 undname 待翻译码 (导出编号不要复制)
Step 19. 看懂了吧?下面就是解析出的可读代码 (会 C++的人都会懂的) ,OK,在你输出的
ref.txt 文档对应的表格中查找解析出的内容 Leap::Controller::enableGesture (自己替换)
Step 20. 于是在第 367 行找到了它,记住行数,跳转到 func.txt 对应的行
Step 21. 在 func.txt 对应的表格中发现 Mingw 对应的函数写法
Step 22. 复制这行编码,注意前面要少复制一个下划线!
Step 23. 将用写字板打开的 def 文件中的 165 号导出函数前添加上复制的内容,并在两者间
加入“ = ”号,如图所示
Step 24. 按此方法修改完所有的或你自己需要的函数后,保存并关闭写字板
Step 25. 最后在 cmd 中输入 dlltool -D Leap.dll -d Leap.def -l Leap.lib -k (自己换名字) 即可!
这样就生成了一个可用 Mingw 来编译的 lib 文件!PS:最后那个命令生成*.a 也是可以的~
教程临近结束,再卖个萌~!o(∩_∩)o 祝大家每天开心~!