22 Qt for android裡呼叫so動態庫

2021-08-01 16:53:21 字數 1666 閱讀 5979

因大部分android裝置都是用arm 處理器,所以動態庫都得用arm的編譯器才可以. 而且還得用ndk裡提供的arm編譯器.

ndk裡編譯器在很深的目錄裡,它裡面有提供乙個指令碼,把編譯器及本身所有的動態庫全部集中生成到指定的路徑.

我的ndk目錄在"/disk3/adt-bundle-linux/android-ndk-r8d"

在終端進入ndk目錄後:

./build/tools/make-standalone

-toolchain

.sh --install-dir

=/opt/android_arm_gcc/

//執行完畢後, android的編譯器及它本身具有的動態庫就在"/opt/android_arm_gcc/"目錄下了

設定環境變數:

vim ~/

.bash_profile //在最後增加語句

export path=/opt/android_arm_gcc/bin:$path

儲存退出後,註消系統後重新登入,以便環境變數生效.

環境變數生效後,就可以用裡面的編譯器編譯自己的動態庫或者移植第三方的動態庫.

我這裡是自己編寫乙個非常簡單的測試動態庫:

動態庫原始碼在"/disk3/qt_android_so"

myadd.h

#ifndef __myadd_h

#define __myadd_h

#if defined(__cplusplus)

extern

"c"

#endif

#endif /* __myadd_h */

myadd.c

int myadd(int a, int b)

編譯:arm-linux-androideabi-gcc myadd.c -shared -o libmyadd.so

然後在qt原始碼工程的頂層目錄(即pro檔案的上一級)右鍵選單–> 「add library」 –> 「external library」

在上面的視窗填入相應的路徑.

確認後,會在pro檔案裡多生成引用庫標頭檔案及庫的語句:

unix:!macx: libs += -l$$pwd/../../disk3/qt_android_so/ -lmyadd

includepath += $$pwd/../../disk3/qt_android_so

dependpath += $$pwd/../../disk3/qt_android_so

但是注意,還得通過右鍵」add existing files …」 導入庫標頭檔案

最後還得在下面的介面裡加入庫,這樣庫才會與程式一起打包

工程裡使用庫的**:

#include

"myadd.h"

void mywin::on_pushbutton_clicked()

編譯器配置的參考:

動態庫 so 函式呼叫

最近剛剛換工作,第一次接觸到要從.so動態庫檔案裡呼叫函式。目前只得到.so庫檔案和封裝的各類函式介面。在網上搜了一些,然後根據自己的 做了整理。首先,理解動態庫,linux中的.so檔案類似於windows中的dll,是動態鏈結庫。當多個程式使用同乙個動態鏈結庫時,既能節約可執行檔案的大小,也能減...

so動態鏈結庫生成 呼叫

linux下檔案的型別是不依賴於其字尾名的,但一般來講 o,是目標檔案,相當於windows中的.obj檔案 so 為共享庫,是shared object,用於動態連線的,和dll差不多 a為靜態庫,是好多個.o合在一起,用於靜態連線 1 動態庫的編譯 下面通過乙個例子來介紹如何生成乙個動態庫。這裡...

Struts2 2 動態呼叫方法

先來看看struts配置檔案 hello.jsp add input.jsp success.jsp update input.jsp success.jsp success.jsp 這會我們加入了namespace命名空間,所以在請求位址的時候不要忘記寫上這個,然後可以看出已經沒有了method方...