当前位置:编程学习 > wap >>

QT4.8.1采用静态qt编译,连接时报错无法解析的外部符号 QString::QString(char const *)

问题出现的情况如下。
1. 首先静态编译qt4.8.1,采用qt-everywhere-opensource-src-4.8.1.zip包。静态编译前,修改win32-msvc2008对应的qmake.conf。
   修改内容为将所有的MD,MDd分别改为MT,MTd
2. 编译configure命令为
   configure -debug-and-release -static -no-fast -script -scripttools -graphicssystem opengl -opengl desktop -qt-zlib -qt-libpng -qt-libtiff -qt-libjpeg -qt-libmng -platform win32-msvc2008 -declarative -mp

3. QT可以按上述过程编译完成,并且demo程序都可以正常运行。

4. 接着对qwt3d库进行编译,环境变量均和静态编译的qt路径对应,包括qmake,lib路径,include路径。编译可以完成,但连接时报错如下
    qwtplot3d.lib(qwt3d_axis.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z),该符号在函数 "public: __thiscall Qwt3D::PixmapWriter::PixmapWriter(void)" (??0PixmapWriter@Qwt3D@@QAE@XZ) 中被引用

5. 之后安装Qt官方发布的编译并打包好的动态库,并将开发环境转换对对应该动态qt库的环境,qwt3d编译可以通过,不存在上述问题。

问题是,是不是我的静态qt在编译时有什么地方设置错了,导致QString::QString(char const *)的函数定义没有在静态库中实现?

               --------------------编程问答--------------------     补充一个现象,我在动态版qt和静态版qt的lib路径下,在每个*.lib文件中搜索QString::QString(char const *)的函数入口字符串"__imp_??0QString@@QAE@PBD@Z",结果很奇怪。

    只有动态编译版的qt的QtCore4.lib和QtCored4.lib文件中找到了该调用入口,而静态版的QtCore.lib和QtCored.lib中找不到该函数入口,应该说明静态编译qt时,声明了QString::QString(char const *),但是编译时没有把对应的定义编译出来并放到QtCore.lib和QtCored.lib中。

    同时我又做了一个试验,新建一个小测试qt项目,里面调用了一个QString的这个构造函数
    
test::test(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
str = QString("test");
ui.setupUi(this);
}

    这次却没有问题,编译完全可以通过,并且跟踪调试也可以执行过去,数据也是对的。请教各位大侠上述问题该如何解决? --------------------编程问答-------------------- 朋友 问题有解决吗?静态链接后 出现大量的链接错误? --------------------编程问答-------------------- 重新编译一次静态库,只编译出错的部分试试 --------------------编程问答-------------------- 请教一下你的这个问题解决了吗,我也和你有同样的问题我的DCMTK全用的是MD编译的,我用QT5.0.2运行了一个QtDCm报的错误全是ndefined reference to `ASC_initializeNetwork(T_ASC_NetworkRole, int, int, T_ASC_Network**, unsigned long)'
undefined reference to `EC_Normal'
undefined reference to `ASC_createAssociationParameters(T_ASC_Parameters**, long)'
undefined reference to `ASC_setAPTitles(T_ASC_Parameters*, char const*, char const*, char const*)'请问一下你的这个是如何解决的能不能我的DCMTK那个文件发到我邮箱里面一份啊471921964@qq.com非常的感谢
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,