linux ndk編譯搭建測試

一、ndk下載

NDK 下載 ?|? Android NDK ?|? Android Developers

二、ndk環境變量配置

ndk解壓:

unzip android-ndk-r26d-linux.zip?

環境變量配置:

?export NDK_HOME=/rd/own/test/android-ndk-r26d/
?export PATH=$PATH:$NDK_HOME

三、編譯測試驗證

3.1 程序創建

創建helloworld, 在其下創建jni目錄,并準備好hello.c和Android.mk

rd@ubuntu:~/test/android-ndk-r26d$ cat helloword/jni/hello.c
#include <stdio.h>
int main (int argc,char *argv[])
{printf("hello world!");return 0;
}
rd@ubuntu:~/test/android-ndk-r26d$ cat helloword/jni/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE ? ?:= helloworld
LOCAL_SRC_FILES := hello.c
#include $(BUILD_SHARED_LIBRARY)
include $(BUILD_EXECUTABLE)
編譯庫文件Android.mk參考:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := FRE
LOCAL_SRC_FILES := FlashRuntime.so
include $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := NativeQCAR
LOCAL_SRC_FILES := main.c
LOCAL_SHARED_LIBRARIES := FRE
include $(BUILD_SHARED_LIBRARY)

備注:如果不創建jni目錄,會報NDK_PROJECT_PATH 找不到。

Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.

如果不創建jni目錄,則需要添加額外的配置( NDK_PROJECT_PATH、NDK_APPLICATION_MK和APP_BUILD_SCRIP),如下:

ndk-build NDK_PROJECT_PATH=/rd/test/android-ndk-r26d/helloword ?NDK_APPLICATION_MK=/rd/test/android-ndk-r26d/Application.mk
cat Application.mk
APP_BUILD_SCRIPT := /rd/test/android-ndk-r26d/helloword/Android.mk

3.2 編譯過程

~/test/android-ndk-r26d/build/ndk-build

Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-21.
[arm64-v8a] Compile ? ? ? ?: helloworld <= hello.c
[arm64-v8a] Executable ? ? : helloworld
[arm64-v8a] Install ? ? ? ?: helloworld => libs/arm64-v8a/helloworld
[armeabi-v7a] Compile thumb ?: helloworld <= hello.c
[armeabi-v7a] Executable ? ? : helloworld
[armeabi-v7a] Install ? ? ? ?: helloworld => libs/armeabi-v7a/helloworld
[x86] Compile ? ? ? ?: helloworld <= hello.c
[x86] Executable ? ? : helloworld
[x86] Install ? ? ? ?: helloworld => libs/x86/helloworld
[x86_64] Compile ? ? ? ?: helloworld <= hello.c
[x86_64] Executable ? ? : helloworld
[x86_64] Install ? ? ? ?: helloworld => libs/x86_64/helloworld

3.3 編譯結果,默認會編譯出不同架構的可執行文件

./helloword/libs/arm64-v8a/helloworld
./helloword/libs/x86/helloworld
./helloword/libs/x86_64/helloworld
./helloword/libs/armeabi-v7a/helloworld
./helloword/obj/local/arm64-v8a/objs/helloworld
./helloword/obj/local/arm64-v8a/helloworld
./helloword/obj/local/x86/objs/helloworld
./helloword/obj/local/x86/helloworld
./helloword/obj/local/x86_64/objs/helloworld
./helloword/obj/local/x86_64/helloworld
./helloword/obj/local/armeabi-v7a/objs/helloworld
./helloword/obj/local/armeabi-v7a/helloworld
?

3.4 測試執行

adb push ?helloworld /data
data/helloworld
hello world!

3.5 編譯說明

也可選擇其他編譯選項:

在jni目錄或者helloword目錄下執行:

ndk-build APP_ABI=all ? ? ? ? ?//編譯所有平臺
ndk-build APP_ABI=armeabi-v7a ?//編譯armv7
ndk-build APP_ABI=mips ? ? ? ? //編譯mips

ndk-build APP_ABI=arm64-v8a //編譯armv8A

其他ABI編譯參考:build/cmake/abis.cmake

~/test/android-ndk-r26d/build/ndk-build // 默認多架構編譯

生成的可執行文件在helloworld/libs或者helloword/obj下,不同平臺對應不同的目錄。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13494.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13494.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13494.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛函數應用和原理

虛函數的表現形式 用子類初始化父類指針, 調用虛函數時, 仍然調用的是子類的虛函數 測試代碼如下 #include <iostream> #include <string.h>using namespace std;class A { public:void test() { cout << a << endl; };virtual void test2 (){ cout …

LeetCode-2589. 完成所有任務的最少時間【棧 貪心 數組 二分查找 排序】

LeetCode-2589. 完成所有任務的最少時間【棧 貪心 數組 二分查找 排序】 題目描述&#xff1a;解題思路一&#xff1a;貪心暴力解題思路二&#xff1a;棧二分查找解題思路三&#xff1a;簡化版 題目描述&#xff1a; 你有一臺電腦&#xff0c;它可以 同時 運行無數個任務。給你…

解鎖電商數據之門:京東商品詳情API接口的深度解析與應用指南

一、京東商品詳情API簡介 京東商品詳情API是京東開放平臺提供的一項服務&#xff0c;允許第三方應用通過調用接口獲取京東商城中商品的詳細信息。這些信息包括但不限于商品名稱、價格、庫存、詳情描述、用戶評價等。 二、功能特點 數據全面&#xff1a;提供商品的全方位數據…

mac安裝兩個版本谷歌瀏覽器;在mac運行不同版本的chrome瀏覽器

場景 正常情況下&#xff0c;mac上只能安裝一個版本的chrome瀏覽器&#xff0c;即使你安裝了兩個版本的&#xff0c;打開老舊版本時候也會自動切換成最新版的瀏覽器 故本文主要解決如何下載和在mac運行不同版本的chrome瀏覽器 文章目錄 場景一、下載1.mac本身就有一個最新版ch…

Java語言saas模式云HIS系統源碼 前端Angular+后臺SpringBoot云HIS系統源碼 HIS系統適合哪些類型的醫院?

Java語言saas模式云HIS系統源碼 前端Angular后臺SpringBoot云HIS系統源碼 HIS系統適合哪些類型的醫院&#xff1f; 云HIS系統&#xff08;醫院信息系統&#xff09;是對醫院及其所屬各部門的人、財、物進行綜合管理&#xff0c;對在醫療活動各階段產生的數據進行采集、儲存、處…

CCF20181201——小明上學

CCF20181201——小明上學 代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int r,y,g,n,k[101],t[101],sum0;cin>>r>>y>>g;cin>>n; for(int i0;i<n;i){cin>>k[i]>>t[i];if(k[i]0||k[i]1)sumt[i];…

ITSM的服務臺如何讓工作更流暢

在現代企業的信息技術管理框架內&#xff0c;IT服務管理&#xff08;IT Service Management, ITSM&#xff09;體系扮演著至關重要的角色&#xff0c;而其中的服務臺則是這一復雜體系的心臟地帶。服務臺不僅僅是解答技術疑問的一線窗口&#xff0c;更是企業IT運維效率與用戶滿意…

C++初探_關聯容器

關聯容器將鍵和值關聯在一起&#xff0c;并使用鍵來查找值。STL提供的四種關聯容器&#xff1a; &#xff08;1&#xff09;set 鍵類型與值類型相同&#xff0c;鍵值對一一對應&#xff1b; &#xff08;2&#xff09;multiset 鍵類型與值類型相同&#xff0c;一個鍵可能對…

FENDI CLUB啤酒,為何女生喜歡?

精釀啤酒已經成了女生喜歡的飲品&#xff0c;在日劇《無法成為野獸的我們》里&#xff0c;主人公小晶永遠保持標準笑容&#xff0c;完美完成所有的工作。只有一個人的時候&#xff0c;她才會放下習慣性的微笑&#xff0c;顯露自己的疲憊。小晶緩解疲憊&#xff0c;就是下班后去…

盡微好物:從0到10億+的抖音電商的TOP1“聯盟團長”,如何使用NineData實現上云下云

杭州盡微供應鏈是抖?平臺?均帶貨10E的TOP1“聯盟團?”&#xff0c;是字節跳動?級代理商&#xff0c;巨量千川指定服務商&#xff0c;擁有商品庫9萬&#xff0c;是?業領先的電商供應鏈平臺&#xff0c;達?陪跑機構。 杭州盡微供應鏈以天貓、京東抖音電商業務為依托&#x…

代碼隨想錄Day41(01背包問題):卡瑪網46、Leetcode416

卡瑪網46&#xff1a; 問題描述&#xff1a; 小明是一位科學家&#xff0c;他需要參加一場重要的國際科學大會&#xff0c;以展示自己的最新研究成果。他需要帶一些研究材料&#xff0c;但是他的行李箱空間有限。這些研究材料包括實驗設備、文獻資料和實驗樣本等等&#xff0…

HCIP-Datacom(H12-821)題庫補充(5月16日)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整題庫請掃描上方二維碼訪問&#xff0c;持續更新中。 以下關于配置防火墻安全優先級的描述&#xff0c;錯誤的是哪一項&#xff1f; A&#xff1a;不新建與默認安全區域同名的安全區域 B&#xff1a;同一系統中&#xff0c…

「服務器」Nginx詳解

本文主要介紹Nginx的原理和服務器部署Node.js項目。 一、Nginx原理 Nginx是一個高性能的HTTP服務器和反向代理服務器&#xff0c;它以高穩定性、豐富的功能集、簡單的配置和低資源消耗而聞名。以下是對Nginx的一些詳解&#xff1a; 1. Nginx是什么&#xff1f; Nginx&#x…

鑷子蠟燭如何設置止盈止損?Anzo Capital昂首資本盈利收場

通過上一篇文章各位聰明的投資者&#xff0c;都已經知道了什么是鑷子蠟燭圖以及如何抓住反轉進行交易&#xff0c;同時也有很多投資者不知道如何設置止盈止損&#xff1f;今天Anzo Capital昂首資本就和各位投資者一起探討如何盈利收場。 看跌的鑷子模式如何交易&#xff1f;首…

【數據結構】樹(Tree)

???專欄&#xff1a;數據結構 &#x1f9d1;?&#x1f393;個人主頁&#xff1a;SWsunlight 目錄 一、基本概念&#xff1a; 1、定義&#xff1a; ?編輯 ?編輯 2、樹的成分&#xff1a; 3、樹的性質&#xff1a; 二、存儲方式&#xff1a; ?編輯 雙親表示法…

C++-float與double

float和double是兩種不同的數據類型&#xff0c;用于存儲浮點數&#xff08;小數&#xff09;。 1.精度&#xff1a; float是單精度浮點數&#xff0c;占用4個字節&#xff0c;通常精度為6-9位小數。 double是雙精度浮點數&#xff0c;占用8個字節&#xff0c;通常精度為15-…

Open3D 點云多平面探測(Python)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 Open3D為我們提供了一種點云多平面探測的算法,該算法使用基于魯棒統計的方法進行平面補丁檢測。該算法具體過程:首先將點云細分為更小的塊(使用八叉樹),然后嘗試為每個塊匹配一個平面。如果平面通過了魯棒平面性…

【C語言每日題解】用函數來模擬實現strlen()、strcpy()、strcmp()、strcat()

&#x1f970;歡迎關注 輕松拿捏C語言系列&#xff0c;來和 小哇 一起進步&#xff01;? 學習了函數后&#xff0c;老師讓我們用函數來實現上面這四個字符串函數。 我們首先來了解一下這四個字符串函數&#xff1a; 1.strlen函數 用于獲取字符串長度&#xff08;不包括末尾…

【源碼】相親交友系統全新UI/情感測試/婚慶中介/交友系統

【交友】相親交友系統全新UI/情感測試/婚慶中介/交友系統 帶商城&#xff0c;情感測試。 https://www.52codes.cc/codes/qt

從開發板導出根文件系統并修改(Ubuntu)

前面提到過基于ubuntu-base去構建根文件系統基于Ubuntu-base構建根文件系統-CSDN博客&#xff0c;但是有時候我們并不需要重頭開始&#xff0c;可以基于現有的根文件系統做調整。又或者我們直接在出廠的系統上去搭建好自己的運行環境并且編譯出自己想要的程序&#xff0c;現在要…