久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Qt多工程多目錄的編譯案例 (轉(zhuǎn))

 3D建模仿真 2015-10-20


 

寫這篇文章的目的是為了讓Qt像VC++那樣,支持一個工程包含多個項目,。即1個App+多個動態(tài)庫,。本案例以1個App+1個共享庫為例:

工程源碼我已上傳http://download.csdn.net/detail/libaineu2004/7188655,歡迎下載,!

1,、在D盤創(chuàng)建空文件夾qMulti

2,、使用Qt Creator創(chuàng)建App應用程序:BigWay。注意:創(chuàng)建模板是App,,存放路徑是D:\qMulti

創(chuàng)建完成后,,請關(guān)閉當前項目。


3,、使用Qt Creator創(chuàng)建共享庫項目:SmallBoy,。注意:創(chuàng)建模板是C++ lib,存放路徑是D:\qMulti




創(chuàng)建完成后,,請關(guān)閉當前項目,。

4、App和Lib創(chuàng)建完成之后,,D:\qMulti的情況如下:


我們手動新建一個文本文件D:\qMulti\qMulti.pro,,內(nèi)容如下:

TEMPLATE=subdirs#表示這個是Qt跨目錄,由多個子項目(如1個應用程序+多個共享庫)組成的大項目
 
SUBDIRS=SmallBoyBigWay#大項目包含的各個子項目,其中BigWay是應用程序,SmallBoy是共享庫
 
CONFIG+=ordered#CONFIG選項要求各個子項目按順序編譯,子目錄的編譯順序在SUBDIRS中指明

到此為止,,情況如下:

5,、使用Qt Creator打開大項目qMulti.pro,可以看到項目樹形結(jié)構(gòu)如下:


(1)原始的BigWay.pro文件是這樣的:

#-------------------------------------------------
#
#ProjectcreatedbyQtCreator2014-04-13T20:18:17
#
#-------------------------------------------------
 
QT       +=coregui
 
greaterThan(QT_MAJOR_VERSION,4):QT+=widgets
 
TARGET=BigWay
TEMPLATE=app
 
 
SOURCES+=main.cpp\
        mainwindow.cpp
 
HEADERS  +=mainwindow.h
 
FORMS    +=mainwindow.ui
 
我們將其修改為:
#-------------------------------------------------
#
#ProjectcreatedbyQtCreator2014-04-13T19:02:41
#
#-------------------------------------------------
 
QT+=coregui#需要的Qt
 
greaterThan(QT_MAJOR_VERSION,4):QT+=widgets
 
TARGET=BigWay#表示編譯后的庫名字為BigWay
 
TEMPLATE=app#表示項目是應用程序模式
 
DESTDIR=../bin#定義項目編譯之后生成的結(jié)果文件的存放路徑
 
win32{#表示W(wǎng)indows環(huán)境的特殊設(shè)置,,這個大括號不能單獨放在下一行,,否則編譯會報錯
    LIBS+=../bin/SmallBoy.lib#包含項目需要用到的共享庫
}
 
unix{#表示Linux環(huán)境的特殊設(shè)置,這個大括號不能單獨放在下一行,,否則編譯會報錯
    LIBS+=../bin/libSmallBoy.so#包含項目需要用到的共享庫,,注意文件名多了關(guān)鍵字"lib",擴展名是.so
}
 
SOURCES+=main.cpp\#項目中的所有源文件的列表
        mainwindow.cpp
 
HEADERS  +=mainwindow.h#項目中的所有頭文件的列表
 
FORMS    +=mainwindow.ui#項目中的所有.ui文件(由Qt設(shè)計器生成)的列表
 

(2)原始的SmallBoy.pro文件是這樣的:

#-------------------------------------------------
#
#ProjectcreatedbyQtCreator2014-04-13T20:24:55
#
#-------------------------------------------------
 
QT       -=gui
 
TARGET=SmallBoy
TEMPLATE=lib
 
DEFINES+=SMALLBOY_LIBRARY
 
SOURCES+=qsmallboy.cpp
 
HEADERS+=qsmallboy.h\
        smallboy_global.h
 
unix{
    target.path=/usr/lib
    INSTALLS+=target
}
 
我們將其修改為:
#-------------------------------------------------
#
#ProjectcreatedbyQtCreator2014-04-13T19:04:24
#
#-------------------------------------------------
 
QT-=gui#不需要Qtui
 
TARGET=SmallBoy#表示編譯后的庫名字為SmallBoy
 
TEMPLATE=lib#表示項目是共享庫模式
 
DEFINES+=SMALLBOY_LIBRARY#項目所需的額外的預處理程序定義的列表
 
DESTDIR=../bin#定義項目編譯之后生成的結(jié)果文件的存放路徑
 
SOURCES+=qsmallboy.cpp#項目中的所有源文件的列表
 
HEADERS+=qsmallboy.h\#項目中的所有頭文件的列表
        smallboy_global.h
 
win32{#表示W(wǎng)indows環(huán)境的特殊設(shè)置,,這個大括號不能單獨放在下一行,,否則編譯會報錯
 
}
 
unix{#表示Linux環(huán)境的特殊設(shè)置,這個大括號不能單獨放在下一行,,否則編譯會報錯
    target.path=/usr/lib
    INSTALLS+=target
}
 
6,、Linux環(huán)境下使用

如果把完整的項目源碼qMulti拷貝到Ubantu Linux下的Qt編譯,編譯過程一切OK,。但是運行時會報錯,,說“errorwhile loading shared libraries: libSmallBoy.so.1: cannot open shared objectfile: No such file or directory”原因指的是Linux下的共享庫路徑配置不正確,找不到libSmallBoy.so庫文件,。默認的linux共享庫搜索路徑為/lib和/usr/lib兩個目錄(不包含子目錄),。

解決方案有兩種:

(1)把編譯生成的四個.so文件全部拷貝到文件系統(tǒng)的路徑/usr/lib之下,需要管理員權(quán)限,。

再運行程序,,OK。

(2)修改Linux環(huán)境變量LD_LIBRARY_PATH,把Qt編程生成的路徑加入,。

export LD_LIBRARY_PATH=/usr/local/lib

在終端里運行上面這行命令,,再運行程序,如果正常就說明解決問題,。但是該方法只是臨時設(shè)置變量 LD_LIBRARY_PATH ,,下次開機,一切設(shè)置將不復存在,;


7,、換一種思路建項目

之前步驟1~4講的是先建項目再建qMulti.pro文件。其實我們可以采取逆序,,先建qMulti.pro文件,,后建子項目SmallBoy和BigWay。

我們手動新建一個文本文件D:\qMulti\qMulti.pro,,內(nèi)容如下:

TEMPLATE=subdirs#表示這個是Qt跨目錄,由多個子項目(如1個應用程序+多個共享庫)組成的大項目
CONFIG+=ordered#CONFIG選項要求各個子項目按順序編譯,,子目錄的編譯順序在SUBDIRS中指明

或者用Qt Creator新建子目錄項目qMulti:


然后用Qt Creator打開這個空的工程。右鍵菜單,,選擇“新子項目”,,創(chuàng)建即可。(*^__^*)

 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多