Qt - QSharedMemory расположение файлов qipc - PullRequest
0 голосов
/ 22 мая 2019

В Linux Qt создает следующие файлы в каталоге /tmp при использовании QSharedMemory:

qipc_sharedmemory_mysharedmem5ffa537fd8798875c98e190df289da7e047c05
qipc_systemsem_mysharedmem5ffa537fd8798875c98e190df289da7e047c05

Я столкнулся с проблемой, когда две разные версии одного и того же программного обеспечения используют два разных местоположениядля этих файлов, что делает их несовместимыми.Вместо этого «новая» версия создает эти файлы в каталоге /tmp/username/.Я не могу понять, что вызывает это.Определяется ли это местоположение самим Qt, и если да, меняется ли оно между версиями?Или это как-то настраивается пользователем, и если да, то где и как?

1 Ответ

0 голосов
/ 22 мая 2019

Я думаю, что вы столкнулись с известной ошибкой 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 в то время.

...