我正在尝试使用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上,我得到:
大小“ 4096”
在Android上:
main.cpp:17(int main(int,char **)):失败的“ QSharedMemory :: create: 无法锁定”
这是一个单一的过程,只是尝试创建共享内存块。
这确实看起来像是一个基本问题...我需要特定的Android权限吗?这在Android中可用吗?
我正在使用Qt Creator 4.6.2,针对Android armv7的目标是gcc 4.9,Qt 5.9.6。 我已经在运行6.0和8.0的Android设备上尝试过。
修改
在Qt 5.11.1中进行了尝试,问题仍然相同。
此外,在运行此命令时,我在应用程序输出控制台上收到一系列警告:
W libsharedExample.so:(null):0((null)):未实现的代码。
注释create
调用将删除6条此类警告。如何弄清楚在给定的Qt版本中实现了哪些功能?如果未在Android上实现此功能,那么应用程序应该如何与其服务进行通信(这是一个不同的过程)?
答案 0 :(得分:1)
因此此类未在Android上实现。 unimplemented code
警告是真实的。
QtRemoteObject是一种在Android上的进程之间移动数据的可靠方法。