【发布时间】:2017-11-09 11:05:53
【问题描述】:
我有一个共享库(例如 libcrypto.so),但没有头文件。
我可以在其他模块中使用这个库吗?
我尝试使用 LOCAL_EXPORT_C_INCLUDES 导出头文件,但它不起作用。
这是预建模块:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcrypto
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libcrypto.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
而且,这是使用 libcrypto 的模块:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES += test.c # include "openssl/crypto.h"
LOCAL_C_INCLUDES += $(crypto_PATH)/include
LOCAL_SHARED_LIBRARIES += libcrypto
LOCAL_MODULE := libtest
LOCAL_MODULE_TAGS := optional
LOCAL_ARM_MODE := arm
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)
这是 libcrypto 模块(boringssl):
LOCAL_PATH := $(call my-dir)
# Target shared library
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libcrypto
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/src/include
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk $(LOCAL_PATH)/crypto-sources.mk
LOCAL_SDK_VERSION := 9
LOCAL_CFLAGS += -fvisibility=hidden -DBORINGSSL_SHARED_LIBRARY -DBORINGSSL_IMPLEMENTATION -DOPENSSL_SMALL -Wno-unused-parameter
# sha256-armv4.S does not compile with clang.
LOCAL_CLANG_ASFLAGS_arm += -no-integrated-as
LOCAL_CLANG_ASFLAGS_arm64 += -march=armv8-a+crypto
include $(LOCAL_PATH)/crypto-sources.mk
include $(BUILD_SHARED_LIBRARY)
编辑:添加了boringssl 模块。我实际上在 test.c 中使用了#include "openssl/crypto.h"
【问题讨论】:
-
您可以运行
ndk-build V=1来详细运行,这将打印 ndk-build 运行的所有构建命令。如果您根本看不到包含路径。一个可能的答案是路径是错误的。如何包含您的两个 Android.mk 文件?你在用import-module吗? -
如果
$(crypto_PATH)/include中存在头文件,则一切正常。但是,如果我删除标头源,将找不到 crypto.h。标头源没有自动导出? -
有人可以帮忙吗?我在 Ubuntu 中使用 NDK 12 和 Eclipse 构建了它。导入header就可以了。
标签: android android-ndk java-native-interface ndk-build libcrypto