簡體   English   中英

Qt5鏈接錯誤

[英]Qt5 linking error

我剛剛安裝了qt5-default軟件包,在我的系統(linux mint petra)上安裝了Qt5。 我有一個簡單的.ui文件和一個main.cpp。 使用uic,我可以將.ui文件轉換為.h文件,該文件包含在main.cpp中。 直到現在都沒問題。

我運行qmake -project,qmake和make。 編譯很好,我得到main.o. 但鏈接給了我一堆“未定義的引用......”。

所以,我檢查了庫。 這是鏈接器調用:

g++ -m64 -Wl,-O1 -o qttest main.o   -L/usr/X11R6/lib64 -lQt5Gui -L/usr/lib/x86_64-linux-gnu -lQt5Core -lGL -lpthread

好的,所以我搜索了這些庫。 據我所知,參數-lQt5Core強制鏈接器在使用-L選項指定的目錄中查找名為libQt5Core.a的文件。 但是,此文件夾僅包含libQt5core.so。 與其他所需庫相同。 據我所知,.a文件用於靜態鏈接,而.so用於動態鏈接。

現在,我該怎么辦? 我應該在互聯網上搜索.a庫嗎? 為什么qmake會生成一個嘗試靜態鏈接的makefile? 我錯過了一些包嗎? 我沒有動態鏈接。 我是否必須添加用於加載.so的代碼? 作為第一步,我感覺靜態鏈接更容易。

最好的祝福

使用uic,我可以將.ui文件轉換為.h文件

不,你應該讓你的構建系統做到這一點。 即在.pro文件中使用FORMS變量。 或者你是否願意每次觸摸你的.ui時手動重新運行uic?

據我所知,參數-lQt5Core強制鏈接器在使用-L選項指定的目錄中查找名為libQt5Core.a的文件。 但是,此文件夾僅包含libQt5core.so。 與其他所需庫相同。 據我所知,.a文件用於靜態鏈接,而.so用於動態鏈接。

這只是故事的一半。 在支持共享庫(即所有現代系統)的系統上,GNU ld將首先查找共享庫(即.so ),並且只有在找不到共享庫時才會查找靜態庫( .a ) 。

無論如何,這不是你的問題。 您的問題是您正在使用.ui文件,即小部件,並且您沒有告訴qmake您想要QtWidgets庫,因為鏈接器的命令行中沒有-lQtWidgets

解決方案:添加

QT += widgets

到你的.pro文件,重新運行qmake,make,就是這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM