新技能get 在任意目錄執行NDK編譯

2021-07-08 13:21:48 字數 1617 閱讀 2276

. 準備環境

首先,你得安裝了android的ndk編譯工具,假設你的ndk的根目錄在 /opt/android/ndk .

當然,最好你能在環境變數裡配置一下路徑,否則使用ndk-build命令的時候,都得加上路徑的字首了。

修改 ~/.bashrc

export ndk_home=/opt/android/ndk

export path=$ndk_home:$path

然後執行: 

$ source ~/.bashrc
2. 編寫 .c 檔案

假設你在 ~/math 目錄下編寫了乙個 math.c 檔案,內容如下:

#include int add( int a , int b )
ok,後面我們就準備在 ~/math 目錄下,將這個.c檔案編譯為android可使用的靜態庫/動態庫了。

3. 編譯成動態庫

編寫 android.mk 檔案,內容如下:

local_path := $(call my-dir)

include $(clear_vars)

local_module := dmath

local_src_files := math.c

include $(build_shared_library)

在 ~/math 目錄下,執行 ndk-build 命令,引數如下:

執行完ndk-build命令後,你會發現當前目錄下,生成了 obj 和 libs 資料夾,這樣,你的libdmath.so動態庫就已經製作完成了,在 libs/armeabi 目錄下。

4. 編譯為靜態庫

編譯為靜態庫,與編譯為動態庫唯一的區別就是 android.mk 檔案的寫法不同,另外,如果要編譯為靜態庫,則必須有其他的**引用該靜態庫**,ndk-build才會真正執行,否則無法成功生成靜態庫,這裡,我們編寫乙個 android.mk ,將 math.c 同時編譯成靜態庫和動態庫。

local_path := $(call my-dir)

include $(clear_vars)

local_module := smath

local_src_files := math.c

include $(build_static_library)

include $(clear_vars)

local_module := dmath

local_static_libraries := smath

local_src_files := math.c

include $(build_shared_library)

同樣,在 ~/math 目錄下執行:

你會在生成的 libs/armeabi 目錄下看到動態庫libdmath.so,在 obj/local/armeabi 目錄下看到靜態庫 libsmath.a

關於在任意目錄將c/c++**編譯為android可使用的靜態庫/動態庫就介紹到這裡了,了解了這個編譯過程,對你將來用ndk編譯第三方庫會很有幫助,另外,如果希望編譯為c/c++應用程式在android機器上執行的話,只需要在**中加乙個main函式,修改android.mk中的最後一行為 include $(build_executable) 即可。

出處:

暴力搜尋 新技能get

最近新學習了一種新的求解的方法,就是暴力搜尋,在通常做題沒有很明確的思路的時候,通常都會採用的一種方式。我們知道,乙個問題的解空間通常對應的是一棵樹的方式進行組織的,那麼我們可以通過根據題目中的條件描述來掃瞄 樹中的每乙個結點,對應的就是將問題的所有可能的解進行掃瞄一遍,從中選出滿足要求的即為問題的...

Android開發實踐 在任意目錄執行NDK編譯

本文暫時不講述如何用ndk編譯第三方開源 庫,而是先以簡單的例子講述如何在任意目錄把自己寫的c 編譯成android可使用的靜態庫 動態庫。1.準備環境 首先,你得安裝了android的ndk編譯工具,假設你的ndk的根目錄在 opt android ndk 當然,最好你能在環境變數裡配置一下路徑,...

看小說新技能Get 爬蟲練習

想看 但是 的廣告又層出不窮,點一頁出來乙個廣告,攔截廣告的操作我又不是很熟練,那就把 資源移動到沒有廣告的地方吧 我不寫 但我是 的搬運工。搬運第一步,瞄準 開啟f12,看看內容在 nice 竟然光明正大的放在這兒,那就別怪我搬運了 魔鬼臉,嘿嘿 要搬就得全部搬走,先把每一章的 給他搬過來。上搬運...