• 15676阅读
  • 6回复

[提问]错误:LNK2019: 无法解析的外部符号 [复制链接]

上一主题 下一主题
离线sdnusqy
 

只看楼主 倒序阅读 楼主  发表于: 2012-05-05
环境是QtCreator,出现以下的错误
09:30:08: 为项目myWidget执行构建步骤 ...

09:30:08: 配置没有改变, 跳过 qmake 步骤.
09:30:08: 正在启动 "D:\VS\VC\BIN\nmake.exe"
{1"?} {2?}
    c:\qtsdk\desktop\qt\4.8.1\msvc2008\bin\qmake.exe -spec c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\mkspecs\win32-msvc2008 CONFIG+=declarative_debug -o Makefile myWidget.pro

Microsoft (R) 程序维护实用工具 9.00.21022.08 版
版权所有 (C) Microsoft Corporation。保留所有权利。

    D:\VS\VC\BIN\nmake.exe -f Makefile.Debug
    link /LIBPATH:"c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\lib" /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /MANIFEST /MANIFESTFILE:"debug\myWidget.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:debug\myWidget.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\nm14A7.tmp

Microsoft (R) 程序维护实用工具 9.00.21022.08 版
版权所有 (C) Microsoft Corporation。保留所有权利。

MyWidget.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall QGLWidget::renderText(int,int,class QString const &,class QFont const &,int)" (__imp_?renderText@QGLWidget@@QAEXHHABVQString@@ABVQFont@@H@Z),该符号在函数 "protected: virtual void __thiscall MyWidget::paintGL(void)" (?paintGL@MyWidget@@MAEXXZ) 中被引用
main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QGLWidget::QGLWidget(class QWidget *,class QGLWidget const *,class QFlags<enum Qt::WindowType>)" (__imp_??0QGLWidget@@QAE@PAVQWidget@@PBV0@V?$QFlags@W4WindowType@Qt@@@@@Z),该符号在函数 "public: __thiscall MyWidget::MyWidget(class QWidget *)" (??0MyWidget@@QAE@PAVQWidget@@@Z) 中被引用
main.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall QGLWidget::metaObject(void)const " (?metaObject@QGLWidget@@UBEPBUQMetaObject@@XZ)
main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall QGLWidget::qt_metacast(char const *)" (?qt_metacast@QGLWidget@@UAEPAXPBD@Z)
main.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall QGLWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@QGLWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual bool __thiscall QGLWidget::event(class QEvent *)" (?event@QGLWidget@@MAE_NPAVQEvent@@@Z)
main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QGLWidget::paintEvent(class QPaintEvent *)" (?paintEvent@QGLWidget@@MAEXPAVQPaintEvent@@@Z)
main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QGLWidget::resizeEvent(class QResizeEvent *)" (?resizeEvent@QGLWidget@@MAEXPAVQResizeEvent@@@Z)
main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall QGLWidget::updateGL(void)" (?updateGL@QGLWidget@@UAEXXZ)
main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall QGLWidget::updateOverlayGL(void)" (?updateOverlayGL@QGLWidget@@UAEXXZ)
main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QGLWidget::initializeOverlayGL(void)" (?initializeOverlayGL@QGLWidget@@MAEXXZ)
main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QGLWidget::resizeOverlayGL(int,int)" (?resizeOverlayGL@QGLWidget@@MAEXHH@Z)
main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QGLWidget::paintOverlayGL(void)" (?paintOverlayGL@QGLWidget@@MAEXXZ)
main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QGLWidget::glInit(void)" (?glInit@QGLWidget@@MAEXXZ)
main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QGLWidget::glDraw(void)" (?glDraw@QGLWidget@@MAEXXZ)
main.obj : error LNK2001: 无法解析的外部符号 "public: virtual class QPaintEngine * __thiscall QGLWidget::paintEngine(void)const " (?paintEngine@QGLWidget@@UBEPAVQPaintEngine@@XZ)
main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall QGLWidget::~QGLWidget(void)" (__imp_??1QGLWidget@@UAE@XZ),该符号在函数 "public: virtual __thiscall MyWidget::~MyWidget(void)" (??1MyWidget@@UAE@XZ) 中被引用
debug\myWidget.exe : fatal error LNK1120: 17 个无法解析的外部命令
NMAKE : fatal error U1077: “d:\VS\VC\BIN\link.EXE”: 返回代码“0x460”
Stop.
NMAKE : fatal error U1077: “D:\VS\VC\BIN\nmake.exe”: 返回代码“0x2”
Stop.
09:30:09: 进程"D:\VS\VC\BIN\nmake.exe"退出,退出代码 2 。
构建项目myWidget 时发生错误 (目标: 桌面)
执行构建步骤 'Make'时
离线呆呆很呆
只看该作者 1楼 发表于: 2012-05-05
我遇到过,
第一次是在pro文件QT+=后没有增加某个版块,比如源码用了QtXml那么pro文件中QT+=要加上xml
第二次是把子类化的qt类放到和main函数一个cpp文件中了,把那个类单独放在h文件中就行了
离线sdnusqy

只看该作者 2楼 发表于: 2012-05-05
回 1楼(呆呆很呆) 的帖子
我是出初学者,能说的详细点吗
离线sdnusqy

只看该作者 3楼 发表于: 2012-05-05
回 1楼(呆呆很呆) 的帖子
我这代码也很简单。
MyWidget.h 展开是:

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QtOpenGL/QGLWidget>
class MyWidget : public QGLWidget
{
public:
        MyWidget(QWidget* parent = 0) : QGLWidget(parent) {}
protected:
        void initializeGL();
        void resizeGL(int w, int h);
        void paintGL();
};
#endif // MYWIDGET_H

MyWidget.cpp 展开:

#include "MyWidget.h"
void MyWidget::initializeGL()
{
}
void MyWidget::resizeGL(int w, int h)
{
}
void MyWidget::paintGL()
{
        renderText(20, 100, tr("Hello, My first OpenGL app."));
}
main.cpp展开:
#include <QApplication>
#include "MyWidget.h"
int main(int argc, char* argv[])
{
        QApplication app(argc, argv);
        MyWidget w;
        w.show();
        return app.exec();
}
pro 展开:

SOURCES += \
    main.cpp \
    MyWidget.cpp

HEADERS += \
    MyWidget.h

离线dbzhang800

只看该作者 4楼 发表于: 2012-05-05
1楼已经告诉你答案了,详细原因可参考

http://hi.baidu.com/cyclone/blog/item/d299af511bed309f8c5430c3.html
离线呆呆很呆
只看该作者 5楼 发表于: 2012-05-05
回 3楼(sdnusqy) 的帖子
pro文件中加上
QT += core gui opengl
离线beitown

只看该作者 6楼 发表于: 2013-01-26
qmake一次  具体见  http://coder.beitown.com/archives/523
快速回复
限100 字节
 
上一个 下一个