在這篇文章中(
),我在android下使用dlopen函式呼叫.so檔案沒有成功,於是只得改用在編譯過程中指定.so檔案的方式加以呼叫,這次在android下倒是通過了。
先在(android原始碼目錄)/development/目錄下建立乙個資料夾,比如起名叫 test123
在test123目錄下建立以下三個檔案:test.c、max.c、android.mk
/**************** test.c 主程式 ********************/
#include
extern max(int,int);
int main()
/**************** max.c 將要被編譯成動態鏈結庫 ********************/
int max(int x,int y)
/**************** android.mk 是android系統中的makefile檔案 ********************/
local_path:= $(call my-dir)
include $(clear_vars)
local_src_files:= \
max.c
local_prelink_module := false
local_module:= libmax
include $(build_shared_library)
include $(clear_vars)
local_src_files:= \
test.c
local_cflags=-lmax
local_ldflags:= \
-lout/target/product/generic/obj/lib
local_shared_libraries := \
libmax
local_module:= test
include $(build_executable)
建立好這三個檔案後,用cd命令回到android原始碼目錄下,執行make test。注意不是資料夾名 test123
再用命令
adb push (android原始碼目錄)/out/target/product/generic/system/bin/test /data
adb push out/target/product/generic/system/lib/libmax.so /system/lib
將test程式和編譯好的libmax.so送進模擬器下相應的位置,其中libmax.so應該放到 /system/lib下,不然test找不到它,test程式就無所謂了,放在什麼地方都行。
用adb shell進入模擬器的控制台,當然事先要先把emulator啟動起來,否則adb shell會失敗。
進入test所在目錄,./test執行
# ./test
5與3相比,5大。
linux c 動態鏈結庫so編寫
linux下的動態鏈結庫是.so檔案,即 shared object,下面是乙個簡單的例子說明如何寫.so以及程式如何動態載入.so中的函式和物件。testso.h ifndef testso h define testso h extern c endif testso h testso.cpp ...
so動態鏈結庫生成 呼叫
linux下檔案的型別是不依賴於其字尾名的,但一般來講 o,是目標檔案,相當於windows中的.obj檔案 so 為共享庫,是shared object,用於動態連線的,和dll差不多 a為靜態庫,是好多個.o合在一起,用於靜態連線 1 動態庫的編譯 下面通過乙個例子來介紹如何生成乙個動態庫。這裡...
Android動態鏈結庫so,你必須了解的特性
so作為安卓系統中最常見的二進位制檔案,如何高效地載入和呼叫so是每個開發者必備的技能。了解安卓系統中.so檔案特性,對於開發者來說非常必要的。360加固保高階安全研究員吳樂,通過本文為開發者詳細講解了安卓系統上.so檔案的一些特性。1 gnu hashes 安卓上在載入so的時候它需要乙個動態鏈結...