• 7863阅读
  • 5回复

调用静态链接库的问题 [复制链接]

上一主题 下一主题
离线yang3kui
 
只看楼主 倒序阅读 楼主  发表于: 2010-10-21
— 本帖被 XChinux 执行加亮操作(2010-10-22) —
我有一个外部的链接库 oal.lib现在想把它添加到我的工程中来。
已经将oal.lib拷贝到当前文件夹
在.pro中使用LIBS += -loal。编译程序时报错f:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -loal

添加完整的路径名LIBS += -LD:\Qt\isLibrary -loal

又报错D:\Qt\isLibrary-build-desktop/../isLibrary/main.cpp:21: undefined reference to `OaParseLabelFile(char*, char*, unsigned short, unsigned short)


OaParseLabelFile(char*, char*, unsigned short, unsigned short)这个函数在oal.lib中有完整实现。该库在VC++中能顺利使用,也是用VC++编译生成的。

在网上百度半天,类似问题都只有提问最终没解决能用的解决方案啊。

我是Qt菜鸟,希望高手们不吝赐教!谢谢.....................windows7环境
离线yang3kui
只看该作者 1楼 发表于: 2010-10-22
大侠们,帮帮忙啊....
离线XChinux

只看该作者 2楼 发表于: 2010-10-22
你的oal库是VC编的(编译器是msvc)? 而你Qt使用的是mingw编译器,两种编译器产生的静态库格式是不一样的。所以你不能这样使用。

要么你换Qt编译器为msvc,或者将.lib转化为mingw使用的.a格式的静态库。

下面的链接是关于.lib转化为.a的说明:
http://hi.baidu.com/df12ek/blog/item/64f4554ade62652d08f7efcf.html
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yang3kui
只看该作者 3楼 发表于: 2010-10-22
回 2楼(XChinux) 的帖子
首先谢谢XChinux的回答
oal库确实是VC编的,我试过直接改后缀名的方法,不好用。我有这个库的源代码,想重新再Qt下编译一遍,但是遇到如下错误
..\oallab\obj_l1.cpp:4923: error: invalid conversion from 'const char*' to 'char*'
定位错误位置OaStrtoKwdValue(  "INTERCHANGE_FORMAT", table_node, ((interchange_format == OA_ASCII_INTERCHANGE_FORMAT) ? "ASCII" : "BINARY"));  
OaStrtoKwdValue函数的生命是OaStrtoKwdValue(char*,OBJDESC*,char*);应该是字符串不能传递给char*。同样代码在VC下编译可以通过。这个就纠结了,难道要改挨个改?这个库一共有几万行代码,函数也有好几百个。而且我也不能把所有声明为char* 的都改成const char*工作量有点大,有啥好的建议没?


另外,我学习Qt时间还没有超过一周,能不能给我一个Qt使用外部链接库的范例啊?
谢谢,简单点就好 421048688@qq.com
离线dbzhang800

只看该作者 4楼 发表于: 2010-10-22
1. 如果你确认你的代码在MSVC下可以通过,而MinGW下不行,那么你可以用 MSVC 版的 Qt,而不是 MinGW 版 Qt

2. 不过 const char* 到 char* 的都能默认转换通过?这是哪个版本的 VC 干的啊?
离线yang3kui
只看该作者 5楼 发表于: 2010-10-22
回 4楼(dbzhang800) 的帖子
大体懂,我的VC还是visual c++ 6.0。不是const char *到char*的转换,而是字符串能不能传递给声明为char*的参数。我也打算把Qt弄成VS2008的add in再继续,不过,我还是很希望得到一两个Qt使用外部链接库的范例,有没有大侠提供啊,不胜感激。
快速回复
限100 字节
 
上一个 下一个