Как заставить Mac искать плагины в каталоге Program.App/Contents/Plugins?

У меня есть приложение Qt, которое ссылается на libqjpeg.dylib. На машине разработки библиотеки находятся в /Applications/Qt/Desktop/Qt/4.8.0/gcc/plugins/imageformats. Я поместил библиотеки в каталог Program.App/Contents/Plugins на целевой машине.

Однако, когда я запускаю его через strace (dtruss на mac), я вижу, что приложение только статистики

  • /Applications/Qt/Desktop/Qt/4.8.0/gcc/plugins/imageformats/libqjpeg.dylib
  • /Users/USER/lib/libqjpeg.dylib
  • /usr/local/lib/libqjpeg.dylib
  • /usr/lib/libqjpeg.dylib

Как я могу заставить его искать плагин в каталоге Program.App/Contents/Plugins?

1 ответ

Прежде всего, я считаю, что более стандартным является размещение dylib в содержании /Framework, а не в содержании/плагинах.

Во-вторых, путь установки для dylib записывается в сам dylib. Вы можете изменить этот путь, используя команду install_name_tool, например:

install_name_tool -id @loader_path/../Frameworks/libqjpeg.dylib libqjpeg.dylib

Затем свяжите свое приложение с этой модифицированной копией libqjpeg.dylib.

licensed under cc by-sa 3.0 with attribution.