我正在尝试使用Crystal和libui创建一个macOS应用程序。我能够静态编译所有必需库的水晶可执行文件,因此它可以在任何mac上运行(部分静态)。由于某种原因,我使用的碎片称为“hedron”(libui的水晶绑定),我无法使用libui.a编译程序,就像我用libevent.a和libgc.a编译我的程序一样。我只能用libui.A.dylib成功构建。
我已经将碎片的绑定文件顶部更改为@[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目录中,它也无法在其他计算机上启动。它从我的开始,因为我的/ usr / local / lib目录中有libui.A.dylib。我的最终目标是将其打包到.app文件夹中,仅用于macOS发布。我应该把libui.A.dylib放在哪里,以便我的可执行文件可以找到它?
通过使用shards build --release --link-flags="-rpath @executable_path/../Frameworks -L
pwd/vendor"
进行编译来计算出来。我只需要将-rpath @executable_path/../Frameworks
添加到链接器中。