0

我想使用 openssl 的 RSA,所以我需要使用 ndk 将 openssl 集成到 Android。我在https://github.com/aluvalasuman/OpenSSL1.0.1cForAndroid下载了适用于 Android 的 openssl 源。 ndk-build在生成的源文件夹中libcrypto.solibssl.so我将它们复制到 $(MY_PROJECT)/jni/lib/,然后Android.mk像这样链接它们:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_LIBS := $(LOCAL_PATH)/lib
LOCAL_STATIC_LIBRARIES := libcrypto libssl
LOCAL_LDLIBS := -llog
LOCAL_MODULE := jni

LOCAL_SRC_FILES := jni.c

include $(BUILD_SHARED_LIBRARY)

并像这样测试了openssl:

#include <stdio.h>
#include <string.h>

#include <openssl/rsa.h>

#define nr_bits 2048

int test_openssl()
{
  RSA *rsa = RSA_generate_key(nr_bits, 65537, NULL, NULL);
  return 0;
}

当我编译它时,它抛出了错误:

....jni/license/license.c:10: error: undefined reference to 'RSA_generate_key'
collect2: ld returned 1 exit status

有谁知道是什么问题?如果有人能提供帮助,我将不胜感激。

4

2 回答 2

0

此类undefined reference错误通常表明编译器/链接器未在其路径中找到 libcrypto.so。你可以尝试几件事:

  1. 将 -lcrypto 添加到 LOCAL_LDLIBS。这告诉编译器尽可能使用 libcrypto.so 来解析未定义的符号

  2. 将 $(MY_PROJECT)/jni/lib/ 添加到 LOCAL_LIBS 以便编译器知道从哪里选择 -lcrypto。这假定在 make 文件中定义了 $(MY_PROJECT)。

于 2013-09-23T15:25:42.673 回答
0

我知道这是一个老问题,但如果有人遇到这个问题,她或他可以使用以下方法解决问题:

LOCAL_STATIC_LIBRARIES := crypto

代替

LOCAL_STATIC_LIBRARIES := libcrypto libssl
于 2016-04-14T15:36:50.497 回答