【问题标题】:How to import python library in C++ using Java Native Interface - Android Studio如何使用 Java Native Interface 在 C++ 中导入 python 库 - Android Studio
【发布时间】:2018-07-12 11:25:04
【问题描述】:

我正在尝试将 python 库导入到使用 JNI 的现有项目中。我们试图实现的是从用 C++ 编写的 JNI 源代码调用 python 脚本。

因此,我们确实尝试包含 python 库 (Python.h),如果没有正确设置,则无法找到该库。

Android.mk 已经存在,我知道我们可以将它包含在其中,但是再次需要 python 库的共享对象,对吗?

如果我们有一个共享对象,这就是我将写入 makefile Android.mk 的内容:

LOCAL_PATH := $(call my-dir)

# Include libpython2.7.so
include $(CLEAR_VARS)
LOCAL_MODULE := python2.7
LOCAL_SRC_FILES := ../python-for-android/dist/default/libs/armeabi/libpython2.7.so
include $(PREBUILT_SHARED_LIBRARY)

【问题讨论】:

    标签: java android python c++ java-native-interface


    【解决方案1】:

    经过数小时的研究,我们终于做到了,希望这能帮助人们更快地相处: 我们从默认的 Android NDK 切换到 CrystaX NDK 10,它已经为每个需要的架构编译了 libpython2.7.so。然后我们将我们的 Android.mk 调整为如下所示:

    LOCAL_PATH := $(call my-dir)
    CRYSTAX_PATH := /home/user/crystax-ndk-10.3.2
    
    ...
    
    # Build libpyjni.so (pyjni.c may be an project source file you wrote)
    include $(CLEAR_VARS)
    LOCAL_MODULE    := pyjni
    LOCAL_SRC_FILES := pyjni.c
    LOCAL_SHARED_LIBRARIES += python2.7 crystax
    LOCAL_LDLIBS += -llog                
    include $(BUILD_SHARED_LIBRARY)
    
    # Include libpython2.7.so
    include $(CLEAR_VARS)
    LOCAL_MODULE    := python2.7
    LOCAL_SRC_FILES := $(CRYSTAX_PATH)/sources/python/2.7/libs/$(TARGET_ARCH_ABI)/libpython2.7.so
    LOCAL_SHARED_LIBRARIES := crystax
    LOCAL_EXPORT_CFLAGS := -I $(CRYSTAX_PATH)/sources/python/2.7/include/python/
        include $(PREBUILT_SHARED_LIBRARY)
    
    # Include libcrystax.so (needed by python library)
    include $(CLEAR_VARS)
    LOCAL_MODULE    := crystax
    LOCAL_SRC_FILES := $(NDK_PATH)/sources/crystax/libs/$(TARGET_ARCH_ABI)/libcrystax.so
    LOCAL_EXPORT_CFLAGS := -I $(NDK_PATH)/sources/crystax/include/
    include $(PREBUILT_SHARED_LIBRARY)
    

    之后我们可以在 Android Studio 中构建项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-23
      • 2013-12-09
      • 2023-04-02
      • 2016-11-06
      • 2013-12-18
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多