我的 crystal 可执行文件使用的 .dylib 文件放在哪里?

Where to put a .dylib file that my crystal executable uses?

我正在尝试使用 Crystal 和 libui 创建一个 macOS 应用程序。我能够使用所有必需的库静态编译 crystal 可执行文件,因此它可以 运行 在任何 mac (部分静态)上。出于某种原因,我正在使用的碎片称为 "hedron"(libui 的 crystal 绑定),我无法使用 libui.a 编译程序,就像我正在编译我的程序一样libevent.a 和 libgc.a。我只能使用 libui.A.dylib 成功构建。

我已将分片的绑定文件顶部更改为 @[Link(ldflags: "#{__DIR__}/../../../../vendor/libui.A.dylib")],并且我正在使用 shards build --release --link-flags="-Lpwd/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 目录中,它也不会在其他计算机上启动。它从我的开始,因为我的 /usr/local/lib 目录中有 libui.A.dylib。我的最终目标是将其打包到一个 .app 文件夹中,仅供 macOS 分发。我应该把 libui.A.dylib 放在哪里以便我的可执行文件可以找到它?

通过使用 shards build --release --link-flags="-rpath @executable_path/../Frameworks -Lpwd/vendor" 编译解决了这个问题。我只需要将 -rpath @executable_path/../Frameworks 添加到链接器。