
我在SO上发现了类似的问题,但是没有一个问题具有相同的工作流程.
我的项目中有一个.so库(libcurl).该项目已建立,但我需要在JNI中的c代码中获取curl.h的内容.
这是我的Android.mk文件:
LOCAL_PATH:= $(call my-dir)liBS_PATH := libs/$(TARGET_ARCH_ABI)include $(CLEAR_VARS)LOCAL_MODulE := libcurl LOCAL_SRC_fileS := $(liBS_PATH)/libcurl.soinclude $(PREBUILT_SHARED_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := testlibLOCAL_SRC_fileS := lib.cLOCAL_SHARED_liBRARIES += libcurlinclude $(BUILD_SHARED_liBRARY)这是我的C类:
#include "curl/curl.h"#include "lib.h"JNIEXPORT jint JNICALL Java_com_example_test_1libcurlandroIDlib_lib_getTestNumber (jnienv *env , jclass clazz){ return 99;}问题出在“ curl / curl.h”包含命令中.我也尝试过,但也没有找到它:
jni/lib.c:2:23: Fatal error: curl/curl.h: No such file or directory#include "curl/curl.h"我的libcurl.so文件位于JNI文件夹内的lib文件夹中,该文件在生成时会在应用程序根目录的libs文件夹中生成相同(我认为)的文件:
有谁知道为什么我无法获得curl.h的推荐人,或者我必须做些什么才能拥有这个库?
谢谢!
解决方法:
jni/lib.c:2:23: Fatal error: curl/curl.h: No such file or directory
include “curl/curl.h”
要使用此库,您不仅需要已编译的.so文件,还需要通常由头文件提供的一组函数原型(也许还有数据类型定义).
使用定义明确的库安装,将在二进制文件附近的路径中提供这些文件-即,您将拥有一些“ curlibrary / lib / libcurl.so”,并在其旁边有一个“ curlibrary / include / curl / curl.h” “
为此,您可以将curl的include目录的路径添加到编译器命令行中,大概是通过将其添加到AndroID.mk中来进行.
LOCAL_C_INCLUDES := curlibrary/include或无论您在哪里保存它.
为了使用包含路径,您在代码中对库的引用需要用尖括号而不是双引号引起来,即
#include <curl/curl.h> //this searches the include path代替
#include "curl/curl.h" //while this specifIEs a location relative to this source file在夜幕降临时的情况下,您可能并没有真正定义好的安装,而只是要使用的.so文件(希望与AndroID ABI兼容)以及已提取或提取的头文件.甚至重新创建.在这种情况下,您可能会更随意地将“ curl.h”扔到项目源代码中的某个位置,并在尝试执行 *** 作时通过特定的引用路径将其包括在内.只要路径正确,它就会起作用-但会破坏设计的简洁层次,并且如果将来的curl API发生更改,可能会造成混乱.
总结以上是内存溢出为你收集整理的Android NDK使用JNI中C代码的.so库全部内容,希望文章能够帮你解决Android NDK使用JNI中C代码的.so库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)