【发布时间】:2014-01-29 03:43:46
【问题描述】:
案例:
我正在构建一个使用libcrypto 和libssl 的应用程序。我正在尝试使用预构建的 libcrypto.so 和 libssl.so 并编译我的应用程序。
但我不断收到未定义的引用错误。
我的应用/Android.mk
LOCAL_PATH := $(call my-dir)
my_LOCAL_PATH := $(LOCAL_PATH)
include $(call all-subdir-makefiles)
LOCAL_PATH := $(my_LOCAL_PATH)
common_SRC_FILES := \
src/foo.c
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(common_SRC_FILES)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../openssl/include
LOCAL_SHARED_LIBRARIES += mylibssl mylibcrypto
include $(BUILD_STATIC_LIBRARY)
我的应用/mylibssl/Android.mk
构建 mylibssl [来自预构建的 libssl.so]
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylibssl
LOCAL_SRC_FILES := libssl.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../openssl/include
include $(BUILD_PREBUILT)
我的应用程序/mylibcrypto/Android.mk
构建 mylibcrypto [来自预构建的 libcrypto.so]
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylibcrypto
LOCAL_SRC_FILES := libcrypto.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../openssl/include
include $(BUILD_PREBUILT)
我不断得到
error: undefined reference to 'BIO_new_mem_buf'
error: undefined reference to 'PEM_read_bio_X509_AUX'
error: undefined reference to 'BIO_free'
...
我花了几个小时试图弄清楚并且完全被卡住了。请帮忙!
【问题讨论】:
-
作为一种解决方案,我也尝试过这种方式来创建预构建的共享库。 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mylibssl LOCAL_SRC_FILES := libssl.so include $(PREBUILT_SHARED_LIBRARY) 但是为此,(当调用 My App/mylibssl/Android.mk 时),我收到消息是: make: `all_modules' 无事可做。因此不会创建预构建的库。
-
进一步调试,发现中间目录下只创建了export_includes,没有.so文件。这就是我们得到错误的原因:未定义对'BIO_new_mem_buf'的引用。但是为什么这个Android.mk文件只生成export_includes!?
-
为什么这个问题被否决了?这是我的第一个问题。有什么问题吗?
-
"为什么这个问题被否决了?" - 只是猜测,但可能是由于缺乏格式。
-
“我花了几个小时试图弄清楚并且完全陷入困境。” - github 有很多在 NDK 构建系统下构建 OpenSSL 的项目。它应该和复制/粘贴一样难:openssl android site:github.com.
标签: android android-ndk openssl libcrypto android.mk