在Linux上,Qt在使用QSharedMemory时会在/tmp目录中创建以下文件
qipc_sharedmemory_mysharedmem5ffa537fd8798875c98e190df289da7e047c05
qipc_systemsem_mysharedmem5ffa537fd8798875c98e190df289da7e047c05我遇到一个问题,同一软件的两个不同版本对这些文件使用两个不同的位置,使它们不兼容。“较新”的版本会在/tmp/username/目录中创建这些文件。我似乎想不出这是什么原因。这个位置是由Qt本身定义的吗?如果是这样,它在不同版本之间是否会发生变化?或者它可以由用户以某种方式配置,如果是,在哪里以及如何配置?
发布于 2019-05-22 19:17:57
我认为您正在经历一个已知的Qt错误,正如官方错误跟踪器中所报告的那样:https://bugreports.qt.io/browse/QTBUG-60771
简而言之,在Qt5.6和Qt5.8之间,QSystemSemaphore ( QSharedMemory)使用的)创建其密钥的方式发生了变化。发现用于创建密钥的方法可能会导致冲突。
Qt 5.9的changelog中记录了不兼容性:https://code.qt.io/cgit/qt/qtbase.git/tree/dist/changes-5.9.0/?h=v5.9.0
[QTBUG-60771] Reverted a change that caused Qt 5.6 through 5.8 not to
connect to QSystemSemaphore and QSharedMemory created by running
applications using Qt earlier than 5.6. Unfortunately, this means that Qt
5.9 will not connect to 5.6-5.8.您可以尝试使用QSharedMemory::setNativeKey()方法来强制使用您自己的密钥(以及/tmp目录中的文件名)。尽管这意味着您应该修改并重新编译软件的两个版本。
我担心“官方”的解决方案是确保你一次只使用一个版本的Qt。
https://stackoverflow.com/questions/56254572
复制相似问题