Qmake没有链接Qt静态库

时间:2019-07-07 19:51:11

标签: c++ qt qt5 qmake nmake

我正在整理一个桌面应用程序堆栈的示例项目结构,包括Qt,Googletest,CMake和C ++。这里的目标是拥有一个跨平台的项目结构,人们可以从github复制该结构以插入其C或C ++静态库(由其UI使用)的代码,对其库进行自动单元测试,并在其中包含UI(Qt5)代码井井有条的示例项目。最终,我将编写脚本(或使用RPM)来拉下项目的依赖关系,并构建项目的静态库,并将其链接到UI,UI也打包为可执行文件。

除了Qt之外,我所有的堆栈部分都工作正常。我不想使用QtCreator,因为这会造成更多的依赖项复杂化,并使安装大小增加很多,因此我将在命令行上编译所有内容。在Windows和Linux(Ubuntu)上,我都有一个问题,在使用qmake制作发行目录或makefile之后,目标文件或makefile分别不将Qt链接到项目。如何告诉qmake在其生成的makefile或目标文件中链接库(包括Qt本身)?

作为其他背景,我正在使用Designer为该项目制作.ui文件。我使用

将它们转换为头文件
uic -o ui_mainwindow.h mainwindow.ui

假定已经为项目的实际代码部分编译了静态库,那么我的UI构建步骤为:

qmake -project
qmake ui.pro
nmake release

我得到的输出是:

cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -I. -I. -IC:\qt5\qtbase\include -IC:\qt5\qtbase\include\QtGui -IC:\qt5\qtbase\include\QtCore -Irelease -IC:\qt5\qtbase\mkspecs\win32-msvc -Forelease\ @C:\Users\User\AppData\Local\Temp\nmA4E2.tmp                                                   mainwindow.cpp                                                                                                                  
link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:release\ui.exe @C:\Users\User\AppData\Local\Temp\nmAACF.tmp                                   
mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QWidget::QWidget(class QWidget *,class QFlags<enum Qt::WindowType>)" (__imp_??0QWidget@@QAE@PAV0@V?$QFlags@W4WindowType@Qt@@@@@Z) referenced in function "public: void __thiscall Ui_MainWindow::setupUi(class QMainWindow *)" (?setupUi@Ui_MainWindow@@QAEXPAVQMainWindow@@@Z)                                                                                                            
mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QWidget::~QWidget(void)" (__imp_??1QWidget@@UAE@XZ) referenced in function "public: virtual void * __thiscall QWidget::`scalar deleting destructor'(unsigned int)" (??_GQWidget@@UAEPAXI@Z) 

接着出现更多相同LNK2019类型的错误,这向我表明Qt未正确链接。此版本在Windows 10上运行,但在Ubuntu 16.04上会发生非常类似的错误

以防万一这是我的代码而不是链接中的问题,这是我的mainwindow.cpp文件:

#include <QtWidgets/QMainWindow>
#include <QtWidgets/QApplication>
#include "ui_mainwindow.h"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QMainWindow *window = new QMainWindow;
    Ui::MainWindow ui;
    ui.setupUi(window);
    window->show();
    return app.exec();
}

ui_mainwindow.h文件是由uic从Qt设计器的ui文件生成的,它很长,因此在此不再赘述。

因此,为了重复起见,只想重复这个问题,我如何告诉qmake在其生成的makefile或目标文件中链接库(包括Qt本身)?

0 个答案:

没有答案