链接.a编译库和自己的共享库Android NDK r8b

链接.a编译库和自己的共享库Android NDK r8b,第1张

概述我在 Android项目中使用 Android NDK r8b链接C库时遇到了问题. 我用ARM的工具链构建了cURL库(没有SSL),它为我提供了一个libcurl.a文件和一个libcurl.so.4.2.0文件. 我还创建了一个C文件来为我的Java代码提供函数并使用cURL库. Android.mk LOCAL_PATH:= $(call my-dir)include $(CLEAR_ 我在 Android项目中使用 Android NDK r8b链接C库时遇到了问题.
我用ARM的工具链构建了cURL库(没有SSL),它为我提供了一个libcurl.a文件和一个libcurl.so.4.2.0文件.
我还创建了一个C文件来为我的Java代码提供函数并使用cURL库.

AndroID.mk

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODulE:= libcurlLOCAL_SRC_fileS := libcurl.ainclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := curljniLOCAL_SRC_fileS := curljni.cLOCAL_STATIC_liBRARIES := libcurlinclude $(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.cjni/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' Failedmake: *** [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-buildSharedlibrary  : 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' Failedmake: *** [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");   } }

我确保在curl.h中声明了所有需要的函数

解决方法 是的,您必须在C文件中包含Curl标头.要允许ndk-build在链接时查找这些头文件,您必须使用LOCAL_EXPORT_C_INCLUDES添加其路径:

include $(CLEAR_VARS)LOCAL_MODulE:= libcurlLOCAL_SRC_fileS := libcurl.aLOCAL_EXPORT_C_INCLUDES := /* put the path to the Curl headers here */include $(PREBUILT_STATIC_liBRARY)

这将自动添加所有需要libcurl的目标中的标头的路径,并且它应该构建和链接.

总结

以上是内存溢出为你收集整理的链接.a编译库和自己的共享库Android NDK r8b全部内容,希望文章能够帮你解决链接.a编译库和自己的共享库Android NDK r8b所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1126764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存