QT開發——動態庫(.so文件)的生成與調用

1.qmake方式生成和調用動態庫

連接:https://blog.csdn.net/lywzgzl/article/details/42805991函數

2.cmake方式生成和調用動態庫

2.1建立共享庫項目

Cmake新建一個Qt Creator項目,在CMakeLists.txt中添加以下代碼ui

#-------------------------------------- 搜索軟件包 -------------------------------------- find_package(Qt5Widgets REQUIRED) find_package(Qt5Network REQUIRED) set(CMAKE_AUTOMOC ON) #-------------------------------------- 包含頭文件 -------------------------------------- include_directories(${Qt5Widgets_INCLUDE_DIRS}) include_directories(${Qt5Network_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) #-------------------------------------- -添加項目- -------------------------------------- FILE(GLOB_RECURSE HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h*) FILE(GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.c*) add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES} ) #STATIC or SHARED target_link_libraries(${PROJECT_NAME} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ) #-------------------------------------- -設置輸出- -------------------------------------- set(OUTPUT_LIB_DIR ${PROJECT_BINARY_DIR}/lib CACHE PATH "Output directory for libraries") file(MAKE_DIRECTORY ${OUTPUT_LIB_DIR}) file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${PROJECT_NAME}) set(LIBRARY_OUTPUT_PATH ${OUTPUT_LIB_DIR}) #-------------------------------------- -安裝項目- -------------------------------------- install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME} LIBRARY DESTINATION ${LIBRARY_OUTPUT_PATH} )

按需編輯plugintest.h和plugintest.cpp,這個就是該共享庫項目的plugintest類了,我加入了一個int sum(int input1, int input2);公共函數,內容爲:spa

int Plugintest::sum(int input1, int input2) { std::cout<<"Hello World!"<<std::endl; int sum = input1+input2; return sum; }

保存並編譯項目吧,沒問題的話會在plugintest-build/lib目錄裏生成libplugintest.so。.net

2.2調用共享庫的項目

2.2.1再次新建Cmake新建一個Qt Creator項目,用來調用剛剛生成的庫code

在項目根目錄下新建一個plugintest文件夾,把生成的庫和頭文件include文件夾全複製進去blog

或者把庫生成安裝到計算機系統文件夾下,這樣每次更新安裝更加方便get

2.2.2在CMakeLists.txt中添加以下代碼input

#-------------------------------------- 包含頭文件 -------------------------------------- include_directories(${CMAKE_CURRENT_SOURCE_DIR}/pludintest/include) #-------------------------------------- 引入庫文件 -------------------------------------- link_directories(${CMAKE_CURRENT_SOURCE_DIR}/pludintest) #-------------------------------------- -添加項目- -------------------------------------- target_link_libraries( ${PROJECT_NAME} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} libplugintest.so )

 

2.2.3修改一下main.cpp調用pluginTest的sum()試試看吧it

個人main.cpp內容以下:io

#include <QApplication> #include "plugintest.h"
int main(int argc, char* argv[]) { QApplication a(argc, argv); Plugintest demo; int sum = demo.sum(3,5); std::cout<<sum<<std::endl; return a.exec(); }

 

 

2.2.4保存編譯項目而後運行。

不出意外就會獲得Hello World!和求和8的輸出了,修改pluginTest項目的sum()函數從新編譯該共享庫,運行主程序就會獲得不一樣的輸出結果(不用從新編譯主程序),這就是共享庫(動態連接庫)的好處所在。

相關文章
相關標籤/搜索