在這篇文章(
【09.03.25】linux環境中dlopen函式的簡單應用)中。實現了在ubuntu linux環境下使用dlopen函式動態呼叫.so鏈結庫。但是也提到了在android下未能成功。由於android也是使用linux核心,因此估計程式本身可能並沒有什麼錯誤,問題應該是出現在android.mk檔案中。今天早上試著修改了一下android.mk,終於將這個問題解決了。
好在兩個c程式和乙個.mk檔案並不是太長,現將它們貼一遍
#include
#include
#include
int main()
else
printf("dlopen ok!\n");
func=dlsym(p,"max");
printf("%d與%d相比,%d為大數。\n",a,b,(*func)(a,b));
dlclose(p);
}#include
int max(int x,int y)
local_path:= $(call my-dir)
include $(clear_vars)
local_src_files:= \
dl2.c
local_prelink_module := true
#local_cflags=-fpic
local_module:= dl2
include $(build_shared_library)
include $(clear_vars)
local_src_files:= \
dl1.c
local_shared_libraries := \
libdl
#local_cflags=-ldl
local_prelink_module := true
local_module:= dl1
include $(build_executable)
上一次之所以失敗,原因似乎是使用了紅色字型的那一句,因為我將其更換為藍色字型的那一句,問題就解決了。看來這樣寫在鏈結時才能正確找到libdl.so,而包含該.so檔案是使用dlopen函式的保證。
將這三個檔案放在android原始碼目錄下的development目錄下的dl資料夾中(dl資料夾是新建的),然後在終端中使用root許可權進入到android原始碼目錄下,執行 make dl1。成功後將會在android原始碼目錄/out/target/product/generic/system/lib/中生成dl2.so動態鏈結庫檔案,在android原始碼目錄/out/target/product/generic/system/bin/中生成dl1可執行檔案。
使用以下命令將它們放入android模擬器,注意要先啟動emulator
adb push android原始碼目錄/out/target/product/generic/system/lib/dl2.so /data
adb push android原始碼目錄/out/target/product/generic/system/bin/dl1 /data
進入data資料夾執行
adb shell
# cd data
# ./dl1
87 9(這裡隨便輸入兩個數)
dlopen ok!
87與9相比,87為大數。
Android 程式設計下字型檔的使用
在安卓作業系統下對於 textview 字型的支援非常有限,預設情況下 textview 的 typeface 屬性支援 sans serif monospace 這三種字型,如果在沒有指定字型的情況下,系統缺省會使用 sans 作為文字顯示的字型。但這三種字型只支援英文,也就是說只要你顯示的文字是...
Android 下使用tcpdump 抓包工具
1.先給手機刷root許可權,執行命令 adb root adb remount ok後 把tcpdump放到c盤根目錄下 c 2.執行命令 adb push c tcpdump data local tcpdump 這個命令是把tcpdump拷到手機中去 3.adb shell chmod 675...
android下使用htop和lsof
在編譯並使用基於android的htop 2.0.2過程中 引用一 發現檢視程序使用檔案控制代碼 快捷鍵 l 實際呼叫命令lsof 資訊一直為空白,經研究發現原來android的lsof其實是包含在toolbox中的子功能,其功能很單一不支援命令列引數,現單獨編譯源 生成程式供htop呼叫。一 編譯...