【问题标题】:How does one resolve link error with Qt?Qt 如何解决链接错误?
【发布时间】:2011-05-25 06:59:15
【问题描述】:

我是 Qt 新手,正在尝试使用 Microsoft 的“CL.exe”编译和链接一个简单的“Hello, World”程序。有关如何执行此操作的任何建议?

程序是:

#include <QtGui>

int main ( int argc, char * argv [] )
    {
    QApplication app ( argc, argv ) ;
    QLabel label ( "Hello, world!" ) ;
    label.show() ;
    return app.exec() ;
    }

我编译和链接:

C:\PROGRA~1\MICROS~1.0\VC\bin\cl.EXE -nologo -Zm200 -Zc:wchar_t- -O2 -MD ^
-W3 -w34100 -w34189 -DUNICODE ^
-DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB ^
-DQT_THREAD_SUPPORT -DQT_NO_DYNAMIC_CAST ^
-I"C:\Qt\2010.05\qt\include\QtCore" ^
-I"C:\Qt\2010.05\qt\include\QtGui" ^
-I"C:\Qt\2010.05\qt\include" ^
-I"." ^
-I"C:\Qt\2010.05\qt\include\ActiveQt" ^
-I"release" ^
-I"C:\Qt\2010.05\qt\mkspecs\win32-msvc2008" ^
-I"C:\Progra~1\MICROS~1.0\VC\include" ^
Hello.cpp ^
/link /LIBPATH:"C:\Qt\2010.05\qt\lib" ^
/LIBPATH:"C:\Progra~1\MICROS~1.0\VC\lib" ^
/LIBPATH:"C:\Progra~1\MID05A~1\VC\PLATFO~1\Lib"

我的链接器错误包括:

Hello.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) pub
lic: virtual __thiscall QApplication::~QApplication(void)" (__imp_??1QApplicatio
n@@UAE@XZ) referenced in function _main
Hello.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) pub
lic: virtual __thiscall QLabel::~QLabel(void)" (__imp_??1QLabel@@UAE@XZ) referen
ced in function _main
Hello.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) pub
lic: static int __cdecl QApplication::exec(void)" (__imp_?exec@QApplication@@SAH
XZ) referenced in function _main
Hello.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) pub
lic: void __thiscall QWidget::show(void)" (__imp_?show@QWidget@@QAEXXZ) referenc
ed in function _main
.
.
.

我的 Hello.pro 文件包含:

######################################################################
# Automatically generated by qmake (2.01a) Mon Dec 13 15:58:13 2010
######################################################################

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .

# Input
SOURCES += Hello.cpp

【问题讨论】:

    标签: qt linker


    【解决方案1】:

    您应该链接 QtCore 和 QtGui 库,但您没有。您的 .pro 文件是什么样的?


    在 .pro 文件发布后编辑添加:您的 .pro 文件看起来没问题。您不会覆盖默认情况下包含core guiQT 变量,这将导致QtCode 和QtGui 被链接到。 QtCore 和 QtGui 都存在于您的包含路径中这一事实也很明显。

    我没有在 Qt 中使用 cl.exe,但您可以尝试添加 LIBS += -lQtCore -lQtGui 以强制链接到 QtCore 和 QtGui。 (不过可能有更优雅的解决方法。)

    【讨论】:

    • Hello.pro 现在包含在问题中。
    • 答案:使用 Microsoft 的编译器使用 Visual Studio 项目 C:\Qt\2010.05\qt\src\corelib\QtCore.vcproj 和 C:\Qt\2010.05\qt\src\gui\ 编译库QtGui.vcproj。然后,在 Visual Studio 中创建 Hello 项目,在 Project ... Properties 下,在“C/C++...Additional Include Directories”下添加目录,在“Linker...General”下添加“...qt\lib”目录...附加库目录”,在“链接器...输入...附加依赖项”下添加“QtCored4.lib 和 QtGuid4.lib”。然后,构建项目。 {希望我记得一切!}
    【解决方案2】:

    您的 PATH 应该包括 qt/bin 目录。在 Visual Studio 命令提示符中,您应该执行创建三个 makefile 的“qmake hello.pro”,然后执行“nmake”。如果你想使用 vcxproj 文件,你应该将你的 TEMPLATE 更改为 vcapp

    【讨论】:

      【解决方案3】:

      试图编译和链接一个简单的 “Hello, World”程序使用 微软的“CL.exe”

      嘿,我认为有更简单的方法可以在 Visual Studio 上编译 qt 应用程序。与其在命令行选项上苦苦挣扎,为什么不用install the qt visual studio addin 让编译项目变得如此简单?只是一个建议:)

      【讨论】:

        猜你喜欢
        • 2010-11-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        • 2014-01-10
        • 1970-01-01
        相关资源
        最近更新 更多