gpt4 book ai didi

android - 使用 Android NDK 将共享库和静态库编译成共享库

转载 作者:行者123 更新时间:2023-11-29 21:29:46 27 4
gpt4 key购买 nike

我在尝试将支持 SSL 的 cURL 编译到应用程序中时遇到了问题。

至此,我已经成功将openSSL包编译成libcrypt.so和libssl.so。

我相信我已经使用配置脚本成功编译了一个支持 SSL 的 libcurl.a 版本,并通过 NDK 中的跨链编译器运行它(在 linux 环境下)。

现在,我想在Eclipse下写一个.so库,可以被Android App的Java代码调用。

目前的文件结构如下:

Project Folder ---> jni ---> include ---> curl ---> curl headers
| |
| -> openssl ---> ssl and crypto headers
|
-> libcrypto.so
-> libssl.so
-> libcurl.a
-> jniProcessRequest.c
-> Android.mk

Android.mk 内容如下:

LOCAL_PATH := $(call my-dir)
MY_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_PATH := $(MY_PATH)

LOCAL_MODULE := crypto
LOCAL_SRC_FILES := libcrypto.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/openssl/
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := libssl.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/openssl/
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := curl
LOCAL_SRC_FILES := libcurl.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/curl/
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := JNIProcessRequest
LOCAL_SRC_FILES := JNIProcessRequest.c
LOCAL_SHARED_LIBRARIES := crypto ssl
LOCAL_STATIC_LIBRARIES := curl
LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

jniProcessRequest.c:

#include <jni.h>
#include <stdlib.h>
#include "include/curl/curl.h"
#include <android/log.h>

JNIEXPORT void JNICALL Java_com_example_jniprocessrequest_MainActivity_jniProcessRequest(JNIEnv * env, jobject obje){
CURL *conn;
conn = curl_easy_init();
}

每次我尝试编译上面的代码时,我在 Eclipse 中都有 undefined reference 错误:

make: *** [obj/local/armeabi/libJNIProcessRequest.so] Error 1
undefined reference to 'curl_easy_init'

我认为这是某种链接错误,但我正在努力寻找错误发生的位置。我花了将近两天的时间尝试了将共享库放在不同位置的所有不同方法,将静态 libcurl 切换为共享 libcurl,更改 Android.mk 文件并遵循有关如何使 cURL 在 Android 中工作的教程。

如有任何帮助,我们将不胜感激!

最佳答案

我认为问题源于错误构建的 libcurl.a 静态库。我用 GitHub 上的用户编译的库替换了我的库,没有更改任何代码,链接错误消失了。

关于android - 使用 Android NDK 将共享库和静态库编译成共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19761768/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com