mac上用qt调用自己生成的qt动态库,该动态库又依赖第三方库
qt下依賴于第三方庫生成的動態庫的調用
- 概述
- 基于聲網的sdk如何在自己的動態庫中使用
- 使用基于第三方庫的動態庫
- 下面看pro文件中的設置
概述
初次使用mac上的qtCreator生成動態庫,該動態庫編寫時調用了第三方庫,基于生成的該動態庫,編寫測試程序來使用改動態庫。第三方庫為聲網所提供的sdk,基于聲網sdk實現自己的功能,并封裝成動態庫。
基于聲網的sdk如何在自己的動態庫中使用
此時針對于聲網sdk封裝自己的動態庫,先從聲網下載mac平臺下的sdk和windows平臺下的sdk,解壓后將需要的庫文件和頭文件存放在項目目錄下,可以建立各自的文件夾。下面先對項目目錄下的涉及到第三方庫文件和頭文件的文件夾作以說明。
上圖中lib是Mac下聲網的庫文件,因為在.framework后綴的文件夾下有的文件夾下含有頭文件。
上述后綴.framework文件夾下含有頭文件。這個文件夾lib下存放的是Mac下聲網的庫文件和頭文件。
sdk目錄下存放的從聲網下載的Windows系統下所需的頭文件,動態庫和靜態庫。有一個不足就是將Mac下聲網使用的靜態庫放在了lib下,圖中藍色選中的便為Mac下聲網的靜態庫文件。
下面來看pro文件中的配置。
以上是pro工程文件中關于在自己的動態庫中使用第三方庫的配置。另外在運行時出現如下錯誤:
需要在自己項目的運行環境下配置參數:
此參數配置的時候結合生成的錯誤提示,看看找不到那個庫,將該庫所在的路徑,添加到上圖所示參數的路徑下。
使用基于第三方庫的動態庫
只需將之前生成的動態庫的庫文件放在一個單獨的目錄下,將生成動態庫的頭文件放在單獨的目錄下,將存放動態庫與頭文件的目錄放在項目目錄下便可。如下:
上圖中紅色的框中是要使用的動態庫所在的文件夾dllLibary和頭文件所在的文件夾include,藍色的框中是當時生成動態庫所依賴的第三方庫。
下面看pro文件中的設置
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \dialog.cppHEADERS += \dialog.hFORMS += \dialog.ui# Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += targetmacx:{ QMAKE_INFO_PLIST = Info.plistQMAKE_MACOSX_DEPLOYMENT_TARGET = 12.0 #設置所需平臺INCLUDEPATH += $$PWD/includeQMAKE_LFLAGS += -F/System/Library/Frameworks #設置可執行程序庫文件的查找路徑 QMAKE_LFLAGS += -F$$PWD/dllLibary #生成的動態庫所引用的路徑LIBS += -L$$PWD/dllLibary/ -ltestAgoraVideoDll.1.0.0 #使用的動態庫 }還需要配置改使用動態庫的測試程序運行環境,和上面提到的一樣,選中改項目,右鍵設置為活動項目,點擊左側的項目,
選中運行,即run,在環境這里添加變量,即被測試的動態庫當時使用的第三方庫的路徑,在我的項目文件夾下是lib文件夾,改文件夾存放生成的動態庫所依賴的第三方庫,將第三方庫的路徑添加到變量DYLD_FRAMEWORK_PATH 中。接下來就是在需要使用動態庫的文件中引入相應的頭文件,調用所需函數即可。
注意
當生成動態庫有用到一些資源文件時,不需要在使用動態庫的項目中考慮該因素,這里的資源文件包含圖片,qml文件。使用動態庫只需引入要使用的動態庫的頭文件和庫文件,至于動態庫所依賴的第三方庫文件,直接在測試動態庫的項目目錄下存放,配置好運行時的環境變量就行,pro文件中只是對當前動態庫的庫文件和頭文件路徑的說明。
總結
以上是生活随笔為你收集整理的mac上用qt调用自己生成的qt动态库,该动态库又依赖第三方库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux还原系统_怎么成为一名合格的L
- 下一篇: Qt关闭程序的时候创建json文件,再次