微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Android 的跨平台 C++ Qt 项目中嵌入 Python 时出错

如何解决在 Android 的跨平台 C++ Qt 项目中嵌入 Python 时出错

我希望将 Python 嵌入到 C++ Qt qmake 项目中,该项目必须能够在 Linux、Android 和 Windows 等多个平台上运行。

到目前为止,我通过执行以下操作在 Linux 部分取得了成功:

.pro 文件中,我包含了这样的 Python C 标头

# Python
unix {

    LIBS += -L 3rdparty/python3.9 -lpython3.9
    INCLUDEPATH += 3rdparty/python3.9
    DEPENdpath += 3rdparty/python3.9
}

有关详细信息,在 .pro 文件中,“unix”包括 Linux 和 Android

接下来,在我的 cpp 文件中,我已经像这样导入了 Python 头

extern "C" {
//For Python integration and avoiding name conflict with reserved Qt keywords slots,emit,and so on
#define IGnorE_CRYPT_H
#pragma push_macro("slots")
#undef slots
#include <Python.h>
#pragma pop_macro("slots")
}

为了避免包含 crypt.h

#ifndef IGnorE_CRYPT_H
#include <crypt.h>
#endif

最后,我可以像这样从 C++ 执行一个简单的 Python 打印脚本

Py_Initialize();
std::string code = "print(\"hello there\")";
PyRun_SimpleString(code.c_str());
Py_Finalize();

现在,最后,当我为 Linux 编译它时,我的主机操作系统,它运行良好,我可以看到“hello there”被输出到控制台。

但是,当我尝试为 Android 编译它时,问题就开始了。针对架构 arm64-v8a 和 armeabi-v7a 的 Android 编译失败并出现这些错误

/home/user/Android/Sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/ld: cannot find -lpython3.9
clang++: error: linker command Failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile.Arm64-v8a:320: libmemento_arm64-v8a.so] Error 1
make[1]: Leaving directory '/tmp/memento-android-release'
make: *** [Makefile:75: arm64-v8a-all] Error 2
make: *** Waiting for unfinished jobs....
In file included from /path/to/source/code/backend.cpp:26:
In file included from /path/to/source/code/3rdparty/python3.9/Python.h:65:
/path/to/source/code/3rdparty/python3.9/pyport.h:741:2: error: "LONG_BIT deFinition appears wrong for platform (bad gcc/glibc config?)."
#error "LONG_BIT deFinition appears wrong for platform (bad gcc/glibc config?)."
 ^
1 error generated.
make[1]: *** [Makefile.Armeabi-v7a:1664: armeabi-v7a/backend.o] Error 1
make[1]: Leaving directory '/tmp/memento-android-release'
make: *** [Makefile:47: armeabi-v7a-all] Error 2
13:32:57: The process "/home/user/Android/Sdk/ndk/21.3.6528147/prebuilt/linux-x86_64/bin/make" exited with code 2.
Error while building/deploying project memento (kit: Android Qt 5.15.2 (android) Clang Multi-Abi)
When executing step "Make"

基本上,有2个错误我不知道如何解决——它找不到lpython3.9,而且“LONG_BIT”定义是错误的。关于如何解决这个问题并为 Android 编译项目的任何想法?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。