Qt如何隐式加载VC动态库

yinlixing 2010-03-24 07:40:08
请问Qt如何隐式加载VC动态库?

我是初学者,按照如下方式做的,失败了,请前辈们赐教。


我的动态库文件为 xvidcore.dll和libxvidcore.lib

Qt项目文件内容
TEMPLATE = lib
CONFIG += plugin \
static
INCLUDEPATH += ../PlayerUI
HEADERS += encoder.h \
xvid.h
SOURCES += encoder.cpp
TARGET = plugintool
DESTDIR = ../PlayerUI/build/plugins
LIBS += D:\Mpeg4Player\plugintool\libxvidcore.lib


部分代码如下
int Encoder::Init(int xDim,int yDim,int CSP,
int iFramerate,int iProfile,int iKeyInterval)
{
m_xDim =xDim;
m_yDim =yDim;
m_CSP =CSP;
int result=0;
xvid_gbl_init_t xvid_gbl_init;
memset(&xvid_gbl_init,0,sizeof(xvid_gbl_init_t));
xvid_gbl_init.version=XVID_VERSION;
xvid_gbl_init.cpu_flags=XVID_CPU_FORCE;
xvid_gbl_init.debug=0;
result = xvid_global(NULL,XVID_GBL_INIT,&xvid_gbl_init,NULL);
xvid_enc_create_t xvid_enc_create;
memset(&xvid_enc_create,0,sizeof(xvid_enc_create_t));
xvid_enc_create.version=XVID_VERSION;
xvid_enc_create.width=m_xDim;
xvid_enc_create.height=m_yDim;
xvid_enc_create.profile=iProfile;
xvid_enc_create.fincr = 1;
xvid_enc_create.fbase = iFramerate;
xvid_enc_create.max_key_interval=iKeyInterval;
result = xvid_encore(NULL,XVID_ENC_CREATE,&xvid_enc_create,NULL);
m_enc_handle=xvid_enc_create.handle;
return result;
}

错误信息如下
./build/plugins/libplugintool.a(encoder.o):D:\Mpeg4Player\plugintool/encoder.cpp:16: undefined reference to `xvid_global'
./build/plugins/libplugintool.a(encoder.o):D:\Mpeg4Player\plugintool/encoder.cpp:26: undefined reference to `xvid_encore'
./build/plugins/libplugintool.a(encoder.o):D:\Mpeg4Player\plugintool/encoder.cpp:53: undefined reference to `xvid_encore'
./build/plugins/libplugintool.a(encoder.o):D:\Mpeg4Player\plugintool/encoder.cpp:72: undefined reference to `xvid_encore'
collect2: ld returned 1 exit status
mingw32-make[2]: *** [build\PlayerUI.exe] Error 1
mingw32-make[1]: *** [debug] Error 2
mingw32-make: *** [sub-PlayerUI-make_default] Error 2
Exited with code 2.
Error while building project Mpeg4Player
When executing build step 'Make'


请高手赐教
...全文
777 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
nufan1982 2012-02-25
  • 打赏
  • 举报
回复
我也遇到了同样的问题,头文件是找到了,不然会报其他的错误。
我能用QLibrary的方法调用,但是隐试调用,始终不行,哪位大侠指点下,
wz19761022 2010-05-11
  • 打赏
  • 举报
回复
不管隐式还是明示,我觉着好像少了一个头文件。我用过明示调用,vc生产的头文件不能直接使用,需要修改以后才能使用。楼主的错误提示很明显:未定义的符合。所以少了头文件。欢迎斧正
qter_wd007 2010-05-10
  • 打赏
  • 举报
回复
希望能有一个好的总结。
pcenshao 2010-05-10
  • 打赏
  • 举报
回复
快判网了 回复下
maozhuatianxia 2010-05-10
  • 打赏
  • 举报
回复
我也 想知道 qt中如何隐式调用dll
many_many 2010-04-17
  • 打赏
  • 举报
回复
结果呢?连接成功了吗?
我是一道光_ 2010-04-10
  • 打赏
  • 举报
回复
顶起。。。

接分。
skyjsq 2010-04-07
  • 打赏
  • 举报
回复
继续讨论,我也在学习如何在Qt下使用Lib静态/动态库~~
pornographer 2010-04-02
  • 打赏
  • 举报
回复
我最近用安捷伦的库 直接用QLibraray包的 你也可以试下
dxms8 2010-03-31
  • 打赏
  • 举报
回复
lz搞定了吗?我最近也在调查qt调用lib的问题,希望能和lz探讨一下
dyw 2010-03-29
  • 打赏
  • 举报
回复
如#6所问,建议使用相同的编译器。
  • 打赏
  • 举报
回复
感觉在XX.pro里面加上点东西应该可以,因为qmake后生成的Makefile才是最关键的
风子II 2010-03-29
  • 打赏
  • 举报
回复
我最近也有做这方面的尝试,也遇到了一些问题,目前QT好像有直接支持vc2008编译器的版本。
如果换一种方式,在vc上安装一个qt的add-on,可以直接创建qt的工程,不过需要下载qt的源码,利用cl编译器重新编译一次,另外还需要下载一个QT的Integration插件。

具体的可以搜“VC集成QT”关键字,会有比较详细的描述。
tingsking18 2010-03-25
  • 打赏
  • 举报
回复
改改makefile直接把这个库编译到工程中去
yinlixing 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tingsking18 的回复:]
VC中的隐士调用指的是静态链接lib文件吧。不和delphi一样的。
你上面贴的错误时链接错误。你看看Makefile中的lib库连接上了么
[/Quote]
是静态链接lib文件,我在我的Makefile中没有看见相关的内容,请问我应该如何做。
tingsking18 2010-03-25
  • 打赏
  • 举报
回复
VC中的隐士调用指的是静态链接lib文件吧。不和delphi一样的。
你上面贴的错误时链接错误。你看看Makefile中的lib库连接上了么
leenuxqt 2010-03-25
  • 打赏
  • 举报
回复
你的xvidcore是用vc编译出来的
你的qt是用g++ 编译出来的
他们能和谐相处么?
bsr2009 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tingsking18 的回复:]

改改makefile直接把这个库编译到工程中去
[/Quote]
同一种目标代码,这种方式可以试一下。
MicroSky2813 2010-03-24
  • 打赏
  • 举报
回复
不知在qmake 和 make 的时候用不用加lib
动态链接很简单的

参考下这个吧
http://blog.csdn.net/cc_qq_yy/archive/2009/05/09/4161498.aspx

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧