gpt4 book ai didi

windows - Android 库链接和 LOCAL_SRC_FILES 指向丢失的文件

转载 作者:可可西里 更新时间:2023-11-01 10:42:23 29 4
gpt4 key购买 nike

我正在尝试使用 OpenSSL 将我的 Cocos2d-x 项目编译到 Android。我可以在 Visual Studio Community 2013 上正常运行该项目,但无法在命令行上使用 cocos compile -p android --android-studio 进行编译。

我将 OpenSSL 安装到路径 project\cocos2d\external\OpenSSL-Win32 并将 OpenSSL 包含路径添加到 Android.mk 文件:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../proj.win32 \
$(LOCAL_PATH)/../../../cocos2d/external/OpenSSL-Win32/include

我关注了Undefined reference to libssl function with Android NDK ,但这并没有真正帮助。我的 OpenSSL 文件夹中没有共享库,只有静态库。我现在能想到的最好的定义是:

include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := $(LOCAL_PATH)/../../../cocos2d/external/OpenSSL-Win32/lib/MinGW/libcrypto-1_1.a
include $(PREBUILT_STATIC_LIBRARY)

这给了我以下错误:

Android NDK: ERROR:jni/Android.mk:crypto: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that jni/jni/../../../cocos2d/external/OpenSSL-Win32/lib/MinGW/libcrypto-1_1.a exists or that its path is correct

文件 libcrypto-1_1.a 位于该文件夹中。

编辑

我从这里下载了适用于 Android 的预构建 OpenSSL 库(包括共享库):https://github.com/r4sas/OpenSSL-1.1-Android-Prebuilt .

此包包含一个 Android.mk 文件,其中包含共享库的定义:

include $(CLEAR_VARS)
LOCAL_MODULE := opencrypto
LOCAL_SRC_FILES := libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := openssl
LOCAL_SRC_FILES := libssl.so
include $(PREBUILT_SHARED_LIBRARY)

我将这些定义添加到文件夹 cocos2dx-project\proj.android-studio\app\jni 中的 Android.mk 文件中。

它还包含 libcrypto.solibssl.so 文件。我将这些文件复制到 cocos2dx-project\proj.android-studio\app\jni 并尝试编译项目,但出现以下错误:

Android NDK: Trying to define local module 'openssl' in jni/Android.mk.
Android NDK: But this module was already defined by jni/Android.mk.

编辑2

我觉得我已经取得了一些进步。

我的 Android.mk 现在看起来像这样:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := openssl
LOCAL_SRC_FILES := libssl.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos/audio/include)

LOCAL_MODULE := MyLib_shared

LOCAL_MODULE_FILENAME := libMyLib

LOCAL_SRC_FILES := hellocpp/main.cpp \
...

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../proj.win32 \
$(LOCAL_PATH)/../../../cocos2d/external/openssl/include

# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END

LOCAL_STATIC_LIBRARIES := cocos2dx_static

# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END

# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END

include $(BUILD_SHARED_LIBRARY)
$(call import-module,.)

那些共享库现在已正确构建,但我收到 undefined reference 错误:

[armeabi] Install        : libcrypto.so => libs/armeabi/libcrypto.so
[armeabi] Install : libssl.so => libs/armeabi/libssl.so
[armeabi] SharedLibrary : libMyLib.so
jni/../../../proj.win32/EncryptionHelper.cpp:61: error: undefined reference to 'EVP_CIPHER_CTX_new'

最佳答案

我没有尝试使用共享库来完成这项工作,而是使用了静态库。

将此添加到 Android.mk:

include $(CLEAR_VARS)
LOCAL_MODULE := crypto_static
LOCAL_SRC_FILES := libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
...
LOCAL_STATIC_LIBRARIES := cocos2dx_static \ crypto_static

现在可以正确编译了。

谢谢jww感谢所有有用的评论并为我指明了正确的方向!

关于windows - Android 库链接和 LOCAL_SRC_FILES 指向丢失的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45661452/

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