Android 是否支持 Qt QSharedMemory?
Is Qt QSharedMemory supported on Android?
我正在尝试使用 QSharedMemory。它在 Windows 下工作正常,而不是在 Android 下工作。第一个 create
调用失败。它没有链接到密钥,因为我使用了不同的值。
我的main.cpp
如下:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QSharedMemory>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QSharedMemory _sharedMemory("QtMemTest", nullptr);
if (!_sharedMemory.create(sizeof(int), QSharedMemory::ReadWrite))
qDebug() << "Failed " << _sharedMemory.errorString();
else
qDebug() << "Size " << QString::number(_sharedMemory.size());
return app.exec();
}
在 Windows,我得到:
Size "4096"
在 Android:
main.cpp:17 (int main(int, char**)): Failed "QSharedMemory::create:
unable to lock"
这是单个进程,只是试图创建共享内存块。
这看起来真的像是一个基本问题...我需要特定的 Android 许可吗?这在 Android 中可用吗?
我正在使用 Qt Creator 4.6.2,目标是 gcc 4.9,Qt 5.9.6 for Android armv7。
我试过 Android 设备 运行 6.0 和 8.0.
编辑
用 Qt 5.11.1 试过了,问题还是一样。
此外,在 运行 执行此操作时,我在应用程序输出控制台上收到了一系列警告:
W libsharedExample.so: (null):0 ((null)): Unimplemented code.
注释掉 create
调用会删除 6 个此类警告。如何确定在给定的 Qt 版本中实现了哪些功能?如果未为 Android 实现此功能,应用程序应如何与其服务通信(这是一个不同的进程)?
所以这个 class 没有在 Android 上实现。 unimplemented code
警告是真实的。
在 Android 上的进程之间移动数据的可靠方法似乎是使用 QtRemoteObject。
我正在尝试使用 QSharedMemory。它在 Windows 下工作正常,而不是在 Android 下工作。第一个 create
调用失败。它没有链接到密钥,因为我使用了不同的值。
我的main.cpp
如下:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QSharedMemory>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QSharedMemory _sharedMemory("QtMemTest", nullptr);
if (!_sharedMemory.create(sizeof(int), QSharedMemory::ReadWrite))
qDebug() << "Failed " << _sharedMemory.errorString();
else
qDebug() << "Size " << QString::number(_sharedMemory.size());
return app.exec();
}
在 Windows,我得到:
Size "4096"
在 Android:
main.cpp:17 (int main(int, char**)): Failed "QSharedMemory::create: unable to lock"
这是单个进程,只是试图创建共享内存块。
这看起来真的像是一个基本问题...我需要特定的 Android 许可吗?这在 Android 中可用吗?
我正在使用 Qt Creator 4.6.2,目标是 gcc 4.9,Qt 5.9.6 for Android armv7。 我试过 Android 设备 运行 6.0 和 8.0.
编辑
用 Qt 5.11.1 试过了,问题还是一样。
此外,在 运行 执行此操作时,我在应用程序输出控制台上收到了一系列警告:
W libsharedExample.so: (null):0 ((null)): Unimplemented code.
注释掉 create
调用会删除 6 个此类警告。如何确定在给定的 Qt 版本中实现了哪些功能?如果未为 Android 实现此功能,应用程序应如何与其服务通信(这是一个不同的进程)?
所以这个 class 没有在 Android 上实现。 unimplemented code
警告是真实的。
在 Android 上的进程之间移动数据的可靠方法似乎是使用 QtRemoteObject。