大佬教程收集整理的这篇文章主要介绍了链接.a编译库和自己的共享库Android NDK r8b,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Android.mk
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= libcurl LOCAL_SRC_FILES := libcurl.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := curljni LOCAL_SRC_FILES := curljni.c LOCAL_STATIC_LIBRARIES := libcurl include $(BUILD_SHARED_LIBRARY)
现在是我的C档案
#include <String.h> #include <jni.h> #include <stdio.h> #include <stdlib.h> jString Java_test_curljni_MainActivity_StringFromJNI(jnienv* env,jobject thiz) { CURL *curl; CURLcode ...... }
当我尝试使用项目文件夹中的ndk-build命令构建时,这是输出错误:
Compile thumb : curljni <= curljni.c jni/curljni.c: In function 'Java_test_curljni_MainActivity_StringFromJNI': jni/curljni.c:8:3: error: unkNown type name 'CURL' jni/curljni.c:9:3: error: unkNown type name 'CURLcode' jni/curljni.c:11:8: warning: assignment makes pointer from Integer without a cast [enabled by default] jni/curljni.c:13:28: error: 'CURLOPT_URL' undeclared (first use in this function) jni/curljni.c:13:28: note: each undeclared identifier is reported only once for each function it appears in /cygdrive/c/android-ndk-r8b/build/core/build-binary.mk:252: recipe for target `obj/local/armeabI/Objs/curljni/curljni.o' Failed make: *** [obj/local/armeabI/Objs/curljni/curljni.o] Error 1
我在Android.mk文件中尝试了很多东西,没有成功.使用PREBUILT_SHARED_LIBRARY没有帮助,因为它只需要.so文件,并将.so.4.2.0的扩展名更改为.so只是告诉我构建时不支持该格式…
有一点我不确定我是否必须在我的C文件中包含标题,但是当我这样做时,它当然找不到它们.
需要注意的是,当我只使用我的Android.mk文件中声明的curl库(省略了C文件的共享库)构建时,libs文件夹中没有创建任何内容!
在此先感谢您的帮助 !
编辑::::
实际上它确实有效mbrenon(我已经尝试了数百万次,现在它有效,不知道有什么不同),但现在我有了
c:/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../. ./arm-linux-androideabi/bin/ld.exe: cAnnot find ./obj/local/armeabi/libcurl.a: Permission denied
我正在使用Cygwin,这可能是我遇到权限问题的原因吗?
当.so和.a被创建时,我设法绕过它,返回权限错误,chmod并再次运行ndk-build,但这看起来有点粗糙!
此外,现在我的卷曲功能都无法到达(“未定义参考(功能)”).
$../../../ndk-build SharedLibrary : libcurljni.so ./obj/local/armeabI/Objs/curljni/curljni.o: In function `Java_test_curljni_MainActivity_StringFromJNI': C:\android-ndk-r8b\apps\curljni\project/jni/curljni.c:12: undefined reference to `curl_easy_init' C:\android-ndk-r8b\apps\curljni\project/jni/curljni.c:14: undefined reference to `curl_easy_setopt' C:\android-ndk-r8b\apps\curljni\project/jni/curljni.c:15: undefined reference to `curl_easy_perform' C:\android-ndk-r8b\apps\curljni\project/jni/curljni.c:17: undefined reference to `curl_easy_cleanup' collect2: ld returned 1 exit status /cygdrive/c/android-ndk-r8b/build/core/build-binary.mk:378: recipe for target `obj/local/armeabi/libcurljni.so' Failed make: *** [obj/local/armeabi/libcurljni.so] Error 1
我的curljni.c如下
jString Java_test_curljni_MainActivity_StringFromJNI(jnienv* env,jobject thiz) { CURL *curl; CURLcode res; char buffer[10]; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl,CURLOPT_URL,"yahoo.com"); res = curl_easy_perform(curl); curl_easy_cleanup(curl); if(res == 0) return (*env)->NewStringUTF(env,"0 response"); else sprintf(buffer,"code: %i",res); return (*env)->NewStringUTF(env,buffer); } else { return (*env)->NewStringUTF(env,"no curl"); } }
以上是大佬教程为你收集整理的链接.a编译库和自己的共享库Android NDK r8b全部内容,希望文章能够帮你解决链接.a编译库和自己的共享库Android NDK r8b所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。