我在SO上发现了类似的问题,但是没有一个问题具有相同的工作流程.
我的项目中有一个.so库(libcurl).该项目已建立,但我需要在JNI中的c代码中获取curl.h的内容.
LOCAL_PATH:= $(call my-dir)
LIBS_PATH := libs/$(TARGET_ARCH_ABI)
include $(CLEAR_VARS)
LOCAL_MODULE := libcurl
LOCAL_SRC_FILES := $(LIBS_PATH)/libcurl.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := testLib
LOCAL_SRC_FILES := lib.c
LOCAL_SHARED_LIBRARIES += libcurl
include $(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发生更改,可能会造成混乱.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。