未解决的到静态 Qwt 构建的外部链接
Posted
技术标签:
【中文标题】未解决的到静态 Qwt 构建的外部链接【英文标题】:unresolved external linking to static Qwt build 【发布时间】:2015-10-01 16:25:30 【问题描述】:我正在尝试链接到 Qwt 的静态构建。为了创建静态构建,我修改了qwtconfig.pri
以包含
#QWT_CONFIG += QwtDll
我删除了代码中的所有#define QWT_DLL
引用。
但是,当我链接到该库时,我收到了一堆抱怨 QSvgRenderer 的未定义引用:
15>qwt.lib(qwt_symbol.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QSvgRenderer::QSvgRenderer(class QObject *)" (__imp_??0QSvgRenderer@@QEAA@PEAVQObject@@@Z) referenced in function "public: void __cdecl QwtSymbol::setSvgDocument(class QByteArray const &)" (?setSvgDocument@QwtSymbol@@QEAAXAEBVQByteArray@@@Z)
15>qwt.lib(qwt_symbol.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl QSvgRenderer::~QSvgRenderer(void)" (__imp_??1QSvgRenderer@@UEAA@XZ) referenced in function "public: virtual void * __cdecl QSvgRenderer::`scalar deleting destructor'(unsigned int)" (??_GQSvgRenderer@@UEAAPEAXI@Z)
15>qwt.lib(qwt_symbol.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl QSvgRenderer::isValid(void)const " (__imp_?isValid@QSvgRenderer@@QEBA_NXZ) referenced in function "void __cdecl qwtDrawSvgSymbols(class QPainter *,class QPointF const *,int,class QSvgRenderer *,class QwtSymbol const &)" (?qwtDrawSvgSymbols@@YAXPEAVQPainter@@PEBVQPointF@@HPEAVQSvgRenderer@@AEBVQwtSymbol@@@Z)
15>qwt.lib(qwt_symbol.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class QRectF __cdecl QSvgRenderer::viewBoxF(void)const " (__imp_?viewBoxF@QSvgRenderer@@QEBA?AVQRectF@@XZ) referenced in function "public: virtual class QRect __cdecl QwtSymbol::boundingRect(void)const " (?boundingRect@QwtSymbol@@UEBA?AVQRect@@XZ)
15>qwt.lib(qwt_symbol.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl QSvgRenderer::load(class QByteArray const &)" (__imp_?load@QSvgRenderer@@QEAA_NAEBVQByteArray@@@Z) referenced in function "public: void __cdecl QwtSymbol::setSvgDocument(class QByteArray const &)" (?setSvgDocument@QwtSymbol@@QEAAXAEBVQByteArray@@@Z)
15>qwt.lib(qwt_symbol.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl QSvgRenderer::render(class QPainter *,class QRectF const &)" (__imp_?render@QSvgRenderer@@QEAAXPEAVQPainter@@AEBVQRectF@@@Z) referenced in function "public: void __cdecl QwtSymbol::drawSymbol(class QPainter *,class QRectF const &)const " (?drawSymbol@QwtSymbol@@QEBAXPEAVQPainter@@AEBVQRectF@@@Z)
15>qwt.lib(qwt_symbol.obj) : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl QSvgRenderer::metaObject(void)const " (?metaObject@QSvgRenderer@@UEBAPEBUQMetaObject@@XZ)
15>qwt.lib(qwt_symbol.obj) : error LNK2001: unresolved external symbol "public: virtual int __cdecl QSvgRenderer::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@QSvgRenderer@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
15>qwt.lib(qwt_symbol.obj) : error LNK2001: unresolved external symbol "public: virtual void * __cdecl QSvgRenderer::qt_metacast(char const *)" (?qt_metacast@QSvgRenderer@@UEAAPEAXPEBD@Z)
15>C:\workspace\fixQwt\executables\linkerGUI\bin\Release\linkerGUI.exe : fatal error LNK1120: 9 unresolved externals
我还需要在项目配置中做些什么,才能正确链接到QSvgRenderer
?
【问题讨论】:
您使用的是什么编译器/平台? @demonplus msvc 2013 在 Windows 7 上。 你做了qt的静态构建吗? @demonplus 否,qwt 的静态构建是否需要它? 是的,我认为制作 qwt 的静态构建可能需要正确链接到您的应用程序。需要搜索有关此的更多信息 【参考方案1】:猜测您的 Qt 版本不支持 SVG - 或者您忘记将其添加到您的项目依赖项中。如果你对 SVG 的东西根本不感兴趣,你也可以在 qwtconfig.pri 中禁用它:
参见:“QWT_CONFIG += QwtSvg”
【讨论】:
感谢 Uwe。我实际上确实使用了QwtPlotRenderer
的 svg 功能。如果我进行共享库构建,一切正常,只是当我注释掉 #QWT_CONFIG += QwtDll
时,我遇到了问题以上是关于未解决的到静态 Qwt 构建的外部链接的主要内容,如果未能解决你的问题,请参考以下文章
当我想在 C++ Builder Starter 中链接静态库 TinyXML 2 的发布版本时,为啥会出现未解决的外部错误?
与使用名称空间的外部库链接时,如何解决 C 中未定义的引用?