我将libcurl编译成静态库-libcurl.a。现在我向在jni中调用libcurl.a中的方法。请问如何实现?
JNI C代码:
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include "curl/curl.h"JNIEXPORT jint JNICALL Java_com_curljni_curljni_curjni(JNIEnv *env, jobject this)
{
CURL *curl;
curl = curl_easy_init();
if(curl) {
curl_easy_cleanup(curl);
return 1;
}
return 0;
}#MK文件:静态库在local_path目录
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)#LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_MODULE := curjniLOCAL_SRC_FILES := curjni.c
#LOCAL_LDFLAGS = $(LOCAL_PATH)/libcurl.a
LOCAL_LDLIBS := -lz -llog -L$(LOCAL_PATH)include $(BUILD_SHARED_LIBRARY)编译错误提示:
$ make APP=curljni2 -B
Android NDK: Building for application 'curljni2'
Compile thumb : curjni <= apps/curljni2/project/jni/curjni.c
SharedLibrary : libcurjni.so
out/apps/curljni2//objs/curjni/curjni.o: In function `Java_com_curljni_curljni_c
urjni':
apps/curljni2/project/jni/curjni.c:13: undefined reference to `curl_easy_init'
apps/curljni2/project/jni/curjni.c:21: undefined reference to `curl_easy_cleanup
'
collect2: ld returned 1 exit status
make: *** [out/apps/curljni2//libcurjni.so] Error 1Administrator@Luye /cygdrive/D/NDK
JNI C代码:
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include "curl/curl.h"JNIEXPORT jint JNICALL Java_com_curljni_curljni_curjni(JNIEnv *env, jobject this)
{
CURL *curl;
curl = curl_easy_init();
if(curl) {
curl_easy_cleanup(curl);
return 1;
}
return 0;
}#MK文件:静态库在local_path目录
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)#LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_MODULE := curjniLOCAL_SRC_FILES := curjni.c
#LOCAL_LDFLAGS = $(LOCAL_PATH)/libcurl.a
LOCAL_LDLIBS := -lz -llog -L$(LOCAL_PATH)include $(BUILD_SHARED_LIBRARY)编译错误提示:
$ make APP=curljni2 -B
Android NDK: Building for application 'curljni2'
Compile thumb : curjni <= apps/curljni2/project/jni/curjni.c
SharedLibrary : libcurjni.so
out/apps/curljni2//objs/curjni/curjni.o: In function `Java_com_curljni_curljni_c
urjni':
apps/curljni2/project/jni/curjni.c:13: undefined reference to `curl_easy_init'
apps/curljni2/project/jni/curjni.c:21: undefined reference to `curl_easy_cleanup
'
collect2: ld returned 1 exit status
make: *** [out/apps/curljni2//libcurjni.so] Error 1Administrator@Luye /cygdrive/D/NDK
解决方案 »
- android 使用BASE64Decoder and BASE64Encoder
- 做了一个读取网络图片的demo,却总是显示有连接错误,大家帮我看下吧
- eclipse中alt +/无法调用android的库,在线等。。。?
- 自定义view不显示,跪求答案
- 做手游的同行们,你们工资是多少?
- MultiAutoCompleteTextView 光标垂直居中
- 谁用过RED5在android实时播放视频?
- android 用模拟器 启动4.4.2的系统 起不来
- fragment 内部异步更新UI
- arm64-v8a版的原生lib, 究竟部署到哪儿去了?
- android的操作系统能不能设置用户权限?
- 如何解析XML文件,并且将解析的内容布局到layout中
好像要在mk文件中,配置点东西!
Android.mk中
LOCAL_LDFLAGS = $(LOCAL_PATH)/xxxx.a这个没有作用吗?
还是Android.mk文件写的有问题。具体怎么写,你再google一下。
我找了一下,就是用LOCAL_LDFLAGS。但我没有在我的机器上试。
# if libcurl is changed to be built as a dynamic library
LOCAL_CFLAGS += $(common_CFLAGS)LOCAL_SRC_FILES := curjni.cpp应该是少了$(CURLX_ONES) ,我再看看那,不过不清楚在上面加,还是在下面的LOCAL_CFLAGS中添加
我的Android.mk里面是这样的:
LOCAL_LDFLAGS := $(LOCAL_PATH)/lib_test.a注意两点:
1. 是:=, 不是=.
2. lib_test.a也是交叉编译出来的。请你再试试。
太烦了,一个编译弄了好久了。。
LOCAL_PATH:= $(call my-dir)# first lib, which will be built statically
#
include $(CLEAR_VARS)LOCAL_MODULE := libtwolib-first
LOCAL_SRC_FILES := first.cinclude $(BUILD_STATIC_LIBRARY)# second lib, which will depend on and include the first one
#
include $(CLEAR_VARS)LOCAL_MODULE := libtwolib-second
LOCAL_SRC_FILES := second.cLOCAL_STATIC_LIBRARIES := libtwolib-firstinclude $(BUILD_SHARED_LIBRARY)