0

/tmp在 Linux 上,Qt在使用时会在目录中创建以下文件QSharedMemory

qipc_sharedmemory_mysharedmem5ffa537fd8798875c98e190df289da7e047c05
qipc_systemsem_mysharedmem5ffa537fd8798875c98e190df289da7e047c05

我遇到了一个问题,即同一软件的两个不同版本对这些文件使用两个不同的位置,从而使它们不兼容。“较新”版本会在/tmp/username/目录中创建这些文件。我似乎无法弄清楚是什么原因造成的。这个位置是由 Qt 本身定义的,如果是,它是否在不同版本之间发生了变化?或者它是否可以由用户以某种方式配置,如果可以,在哪里以及如何配置?

4

1 回答 1

0

我认为您遇到了一个已知的 Qt 错误,如官方错误跟踪器中所述:https ://bugreports.qt.io/browse/QTBUG-60771

简而言之,Qt 5.6 和 Qt 5.8 在QSystemSemaphore(由QSharedMemory使用)创建其密钥的方式上发生了变化。发现用于创建密钥的方法可能会导致冲突。

不兼容性记录在 Qt 5.9 的更改日志中: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。

于 2019-05-22T11:17:56.520 回答