Где поместить файл .dylib, который использует мой кристалл? - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь создать приложение macOS, используя Crystal и libui. Я могу статически скомпилировать исполняемый файл Crystal со всеми необходимыми библиотеками, чтобы он мог работать на любом Mac (частично статическом). По какой-то причине я использую осколок, который называется «хедрон» (кристаллические привязки для libui), я не могу скомпилировать программу с помощью libui.a, как я собираю свою программу с помощью libevent.a и libgc.a. Я могу только успешно построить с libui.A.dylib.

Я изменил файл top of bindings для шарда на @[Link(ldflags: "#{__DIR__}/../../../../vendor/libui.A.dylib")], и я компилирую свою программу, используя shards build --release --link-flags="-L pwd /vendor". В папке vendor моего проекта у меня есть libevent.a, libssl.a, libgc.a, libcrypto.a и libui.A.dylib. Проект компилируется нормально. Затем я запускаю otool -L ./bin/CrystalDistroTest и получаю следующий вывод:

./bin/CrystalDistroTest:
        @rpath/libui.A.dylib (compatibility version 0.0.0, current version 0.0.0)
        /usr/lib/libpcre.0.dylib (compatibility version 1.0.0, current version 1.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
        /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)

Даже когда я копирую libui.A.dylib в каталог ./bin, он не запускается на других компьютерах. Это начинается у меня, потому что у меня есть libui.A.dylib в моем / usr / local / lib каталоге. Моя конечная цель - упаковать это в папку .app только для дистрибутива macOS. Куда мне положить libui.A.dylib, чтобы мой исполняемый файл мог его найти?

1 Ответ

3 голосов
/ 12 апреля 2019

Разобрался, скомпилировав с shards build --release --link-flags="-rpath @executable_path/../Frameworks -L pwd /vendor". Мне просто нужно было добавить -rpath @executable_path/../Frameworks к компоновщику.

...