Qt程式依賴庫編譯選項

2021-05-22 21:45:41 字數 1090 閱讀 6066

qt程式設計4個多月以來,對於工程檔案的組織一直有著更深入的理解。從起初的.pro,makefile,.h,.cpp,.o,.moc,*_ui.h,.so等一股腦的放到工程檔案,到後來有組織的將檔案分門別類的放到各個專案子目錄下,工程目錄給人感覺越來越顯得更professinal一些了。

然而對於編譯後的動態庫檔案依賴關係的處理,近期隨著工程**的不斷膨脹,依賴庫的不斷增多,變得越來越重要了。此前的做法是,簡單粗暴的把私有依賴的庫檔案cp到/usr/lib下,然後ldconfig,自己的程式就能跑起來了。但是當目標機上同時也有其他應用程式需要某個特定版本庫的時候,這種做法會造成嚴重的版本衝突問題。

因此,專業的做法是,自己的程式依賴庫只放到應用程式特定的目錄下,程式去連線對應目錄的庫檔案執行。那麼,使用qt編譯linux下的應用程式該怎麼做呢?

經過摸索、檢視qt聯機幫助,並親自實踐,實現起來十分簡單。

在make檔案編寫中,lflags選項可以設定自定義的可執行程式庫檔案查詢路徑。那麼在qt中如何設定呢?如果修改.pro檔案,使用qmake來自動生成lflags依賴?

在「qmake variable reference」(qmake 變數參考)一節中,正是這個引數:qmake_lflags,會修改makefile的lflags選項。本引數包含了傳遞給聯結器的一組通用的標記。如果要為某個特定平台或者特殊專案修改選項,可以使用某個特殊引數,而可不用本引數。與之對應的還有qmake_lflags_console(僅適用於windows)、qmake_lflags_debug(指定debug版依賴庫路徑)、qmake_lflags_release(指定release版依賴庫路徑).....

使用指定的qmake_lflags的好處在於,能夠根據當前編譯的不同配置(例如debug/release)選擇不同路徑下的依賴庫(這些庫也可能分為debug/release版)。當然,如果所有依賴庫版本都相同,那麼直接修改qmake_lflags效果是一樣的。

那麼,在qt專案的pro檔案中,增加一行:

qmake_lflags_release += -wl,-rpath=[自定義庫檔案路徑]-wl,-bsymbolic

然後執行qmake,make,把/usr/lib下的所有自定義庫刪掉,執行一下自己的程式,發現已經生效了。

gcc編譯選項的迴圈重複查詢依賴庫等命令

link時,若liba.a依賴libb.a,若這樣寫 lb la,則鏈結通不過,gcc有個選項 xlinker 可以讓gcc在鏈結時反覆查詢依賴庫,用法 gcc shared o libxx.so xx.o l.xlinker lb la xlinker 這樣,包含在 xlinker 和 xlink...

opencv 編譯庫依賴問題

如果pkg config找到了 lib pc 則就說明我們有 lib pc 庫。而 lib pc 裡則定義了 header和lib的目錄位置。opencv預設pkg config只會尋找 usr share pkgconfig pc 和 usr lib pkgconfig pc usr lib64 ...

GCC編譯器 庫依賴

標頭檔案 i選項可以向gcc的標頭檔案搜尋路徑中新增新的目錄 如gcc foo.c i home xiaowp include o foo 庫檔案.靜態庫 a.通過 l選項向gcc的庫檔案搜尋路徑中新增新的目錄 l是指定具體的庫檔案 b.或者查詢環境變數ld library path 動態庫 a.把...