当前位置: 代码迷 >> QT开发 >> Qt怎么隐式加载VC动态库
  详细解决方案

Qt怎么隐式加载VC动态库

热度:89   发布时间:2016-04-25 04:47:47.0
Qt如何隐式加载VC动态库
请问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'


请高手赐教

------解决方案--------------------
不知在qmake 和 make 的时候用不用加lib
动态链接很简单的

参考下这个吧
http://blog.csdn.net/cc_qq_yy/archive/2009/05/09/4161498.aspx
------解决方案--------------------
VC中的隐士调用指的是静态链接lib文件吧。不和delphi一样的。
你上面贴的错误时链接错误。你看看Makefile中的lib库连接上了么
------解决方案--------------------
改改makefile直接把这个库编译到工程中去
------解决方案--------------------
探讨

改改makefile直接把这个库编译到工程中去

------解决方案--------------------
你的xvidcore是用vc编译出来的
你的qt是用g++ 编译出来的
他们能和谐相处么?
------解决方案--------------------
感觉在XX.pro里面加上点东西应该可以,因为qmake后生成的Makefile才是最关键的
------解决方案--------------------
如#6所问,建议使用相同的编译器。
------解决方案--------------------
我最近也有做这方面的尝试,也遇到了一些问题,目前QT好像有直接支持vc2008编译器的版本。
如果换一种方式,在vc上安装一个qt的add-on,可以直接创建qt的工程,不过需要下载qt的源码,利用cl编译器重新编译一次,另外还需要下载一个QT的Integration插件。

具体的可以搜“VC集成QT”关键字,会有比较详细的描述。
------解决方案--------------------
  相关解决方案