因大部分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方...