Android下動態鏈結庫 so呼叫的簡單例子

2021-06-19 22:35:39 字數 1451 閱讀 4523

在這篇文章中(

),我在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的時候它需要乙個動態鏈結...