當前位置:首頁 » 操作系統 » ndk源碼

ndk源碼

發布時間: 2023-01-24 23:39:42

① android ndk編譯C源碼~ld提示mblen()無法鏈接怎麼辦undefined reference to 'mblen'

不制動啊,這個唯難題是我不懂的

② Android用NDK和整套源碼下編譯JNI的不同

NDK:
1、包含頭文件
#include <android/log.h>
2、Android.mk中包含庫
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
上面這個一定要,不然出現error: undefined reference to '__android_log_print'
LOCAL_SHARED_LIBRARIES := libdl\
liblog\ #經測試在Eclipse中用NDK編譯可有可無,沒啥用!但在源碼中就必須是他,所以都加上吧!
libpre_AppUpgrade\
libpre_AppArea\
3、在你的jni文件中定義
#define LOGD() __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) // 定義LOGD類型
#define LOGI() __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) // 定義LOGI類型
#define LOGW() __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__) // 定義LOGW類型
#define LOGE() __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) // 定義LOGE類型
#define LOGF() __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,__VA_ARGS__) // 定義LOGF類型
adnroid4.2源碼中已經將LOGD等都加了一個頭,
#define ALOGD() __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) // 定義LOGD類型
#define ALOGI() __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) // 定義LOGI類型
#define ALOGW() __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__) // 定義LOGW類型
#define ALOGE() __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) // 定義LOGE類型
#define ALOGF() __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,__VA_ARGS__) // 定義LOGF類型
注意如果你不想在每一個jni文件中都定義上述宏,投機方法即可以定義在:D:\android-ndk-r9d\platforms\android-19\arch-arm\usr\include\android\log.h中!當然這種編譯也只能在你本機上使用啦~
源碼開發:
1、Android.mk中包含庫
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
LOCAL_SHARED_LIBRARIES := libdl\
liblog\ //源碼中開發一定的加上
libpre_AppUpgrade\
libpre_AppArea\
2、包含頭文件#include <utils/Log.h>
3、注意在使用時記得包含庫的頭文件
轉載

③ 如何解決android ndk r8c 老是重新編譯源代碼的問題

ndk編譯是針對jni的。jni是java native interface的縮寫,意為java本地介面。 java本地介面一般是用c語言來實現一些功能,然後通過特定的格式暴露介面給java調用。但是C語言的代碼不能直接被java使用,而是需要通過ndk進行編譯,編譯後會在libs目錄下生成.so文件,這事動態運行庫,這時C語言曝露出的介面才能被java調用。 樓主可以檢查你的vlc項目中的libs目錄下,是否包含了.so文件,如果有的話一般是不需要ndk進行 編譯的。不過如果樓主修改了c語言中的代碼,那麼為了使修改生效必須從新用ndk編譯,編譯後會刪除原來生成的.so,並生成新的.so文件。 使用ndk-r7以及更高版本的ndk,可以免安裝cygwin而直接使用命令行進行編譯,非常方便。 方法: 將ndk的根目錄設置環境變數,然後dos命令行進入需要編譯的項目的根目錄,執行命令 ndk-build

linux下 如何用NDK生成C語言動態庫

先將要編譯的源代碼文件移動到一個目錄下面,寫好makefile文件,一般是已經寫好的(沒有的話就要自己寫了),然後配置好ndk環境變數,在/etc/profile目錄下添加export NDK_ROOT=/你的nkd路徑,然後保存,重啟機器,最後就是cd到你要編譯的源碼目錄下,調用ndk_build就行了

⑤ 在哪可以看到NDK下gnu-libstdc++庫的源代碼

概括來說主要分為以下幾種情況: 1. 代碼的保護,由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。 2. 在NDK中調用第三方C/C++庫,因為大部分的開源庫都是用C/C++代碼編寫的。 3. 便於移植,用C/C++寫的庫可以方便在其他的嵌入式平

⑥ Android用NDK和整套源碼下編譯JNI的不同

問題描述的不清楚,不覺明理,ndk的問題還是建議到ndk吧去反饋,
我是ndk吧吧主,有問題可以到ndk吧留言,謝謝!

⑦ 最近在研究JNI和NDK。現有C++源碼,要求通過JNI,JAVA能調用C++源碼的功能,該怎麼來實現

自己看,我懶得貼了
http://www.myext.cn/android/33060.html

⑧ Android用NDK和整套源碼下編譯JNI的不同

2. 注冊函數的方法是不同的。舉例說,在com/evan129/jnitest/jniutils.java有個native int foo()方法,需要在jni中實現
在ndk中,只要實現這個函數,然後函數名是以jint java_com_evan129_jnitest_jniutils_foo(jnienv* env, jobject thiz) 命名既可。也就是說,如果jni只要實現這個函數,並且功能也很簡單的話,那麼jni c/cpp文件里只需要這一個函數就完事了。
但在android源碼中編譯jni代碼是不同的,jni中的函數名無所謂。不過至少還需要加一個
jniexport jint jnicall jni_onload(javavm* vm, void* reserved)方法,這個方法可以找個現有的復制一把就行,檢查運行環境的。然後主要是這個方法中會調用(*env).registernatives函數,在這里把jni中的方法和java文件中的方法關聯起來。
3. 有個很詭異的區別,自動傳入的jnienv* env好像不是一個東西。因為在android源碼中使用這個env一般是如env->newstringutf(…),而ndk中sample里的一處是(*env)->newstringutf(…) 這env和*env差很大。但兩處函數傳入的都是jnienv* env,只能懷疑jnienv的定義是不是都是不同的。

⑨ Android studio怎麼關聯NDK源碼

NDK算是一個插件,安裝以後可以在AS上面開發C C++,如果關聯這個插件呢

熱點內容
蘋果手機備忘錄怎麼加密 發布:2024-05-19 18:57:57 瀏覽:16
光榮腳本 發布:2024-05-19 18:57:48 瀏覽:997
pythonjson字元串 發布:2024-05-19 18:51:43 瀏覽:253
什麼是伺服器廠商介紹 發布:2024-05-19 18:50:09 瀏覽:371
伺服器網卡硬體型號怎麼看 發布:2024-05-19 18:36:41 瀏覽:666
修改pve伺服器ip 發布:2024-05-19 18:31:52 瀏覽:469
微信密碼忘記了如何取出裡面的錢 發布:2024-05-19 18:27:35 瀏覽:330
vs2005反編譯 發布:2024-05-19 18:26:34 瀏覽:364
ug啟動語言腳本 發布:2024-05-19 18:25:57 瀏覽:875
緩存伺服器技術 發布:2024-05-19 18:25:56 瀏覽:886