參考鏈接:https://blog.csdn.net/csdn83419527/article/details/78840798
https://blog.csdn.net/qq_40263915/article/details/104884917
======創建動態庫.os文件======
1.新建工程
點擊Qt Creator菜單欄“文件”-->“新建文件或項目”,選擇Library,C++庫,點“choose”。
一路Next下去即可,在Kits步驟也是,按照系統默認設置即可,除非自己需要改變編譯等配置;直接 點“下一步”即可。
最后完成創建,如果需要進行版本控制可以進行設置,否則點“完成”即可。
2.代碼實現
創建后,Qt Creator自動生成三個文件分別是XXX_global.h、XXX.h、XXX.cpp。其中XXX_global.h是一個宏定義文件,如下圖所示。
注意:圖中標藍的部分,可以拷貝至XXX.h中,同時將XXX_global.h刪除掉,這樣項目也可以直接編譯使用,不刪除也沒有問題,只是使用時,使用程序需要同時將XXX_global.h、XXX.h包含,否則會報找不到XXX_global.h錯誤。這里建議把藍標部分復制到XXX.h文件中,這樣后續調用只需要包含一個即可,標藍部分拷貝到XXX.h中的位置如下圖所示。
下面編寫一個測試函數,先在頭文件聲明
接着在 .cpp 編寫實現代碼邏輯,這里實現把兩個參數相加並返回。
3.編譯生成 .os 庫文件
編譯后會彈出一個界面,不用管它,直接關閉即可
編譯完成會在Release文件夾里生成的4個庫文件,如下圖。
到這里就已經完成 .os 庫文件的創建了,為了方便后續給別調用,我們可以新建一個文件夾,把上面生成的4個庫文件和XXX.h文件保存在里面,后續只需要把這個文件夾給別的項目就可以調用了。
======實現調用動態庫.os文件======
1.新建立工程
建立工程這里不細說了,具體可以參考:https://www.cnblogs.com/xingboy/p/14376226.html
項目建成如下:
2.調用os庫
把上面新建保存有需要用的os庫文件跟.h文件的文件夾復制到,新建項目的文件夾里,然后在313kDemo處右鍵點擊,彈出,選擇Add Library。
然后選擇外部庫.
完成后.por文件會出現如下內容
$$PWD用於指定包含.pro文件目錄的完整路徑;INCLUDEPATH 指定編譯項目時被搜索到的 #include 目錄;LIBS指定了鏈接到項目中庫的列表,添加的是共享庫文件,-L添加目錄,-l指定共享庫名稱(注意是共享庫項目名而非共享庫文件名);DEPENDPATH是程序編譯時依賴的相關路徑。然后我們就可以添加頭文件,類似於內部定義的函數一樣實現調用了。
先在項目里添加os庫文件的.h文件,把保存有os文件與.h文件的文件夾里的.h文件添加進去。
然后在mainwindow.h文件里包含os庫的.h文件,其實不一定在mainwindow.h文件里包含,在其他文件包含也行,這里為了方便就直接在這里包含了;然后對OS庫的頭文件里聲明的類名進行重命名。
3.代碼測試
在UI界面添加3個文本框跟一個按鈕,編輯代碼實現,獲取兩個文本款數值,調用os庫里的函數,實現該函數功能,並把結果輸出在另一個文本框。
選中按鈕,右擊轉到槽,添加實現代碼。
void MainWindow::on_pushButton_clicked() { int a=ui->textA->text().toInt(); //獲取文本框的值 int b=ui->textB->text().toInt(); int data=mySdk.MyTest(a,b); ui->textC->setText(QString::number(data)); //把數值轉為字符串輸出到文本框 }
4.運行查看結果
5. 注意事項
如果你把程序與so動態鏈接庫文件,復制出來使用,需要修改 ld.so.conf 文件,指定的動態庫搜索路徑,執行 sudo vim /etc/ld.so.conf 在該文件里添加你保存動態鏈接庫的路徑,直接添加即可;然后執行 sudo ldconfig 使能該文件,如果報錯 is not a symbolic link 可參考我另一個博客 https://www.cnblogs.com/xingboy/p/15434271.html 解決;下面附上一段以前寫的關於 Linux 怎么配置使用 QT 程序與 so 文件的環境說明:
# You use the application of aa158 that need deploy some environment when first time . Firest : If you computer without the Qt5 environment well then you need deploy the environment , that you need key in " sudo apt-get update " on the console , next key in " sudo apt-get install qt5-default " to deploy the environment , last key in " sudo apt install libqt5serialport5* -y " on the console . Sencond : You need key in " sudo vim /etc/ld.so.conf " on the console , then tack on path of applicantion in the " /etc/ld.so.conf " . Exemplify tack on " /home/aplex/Desktop/AplexAA158 " in the " /etc/ld.so.conf " . Third : You need key in " sudo ldconfig " on the console that enable it . Finally: when into the folder of application after you need key in " sudo ./AA158 " to perform the application .