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

时间:2019-04-11 21:54:39

标签: macos frameworks shared-libraries dynamic-linking crystal-lang

我正在尝试使用Crystal和libui创建一个macOS应用程序。我能够用所有必需的库静态地编译Crystal可执行文件,因此它可以在任何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"编译程序。在我的项目的供应商文件夹中,我有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。我的最终目标是将其打包到仅适用于macOS发行版的.app文件夹中。我应该将libui.A.dylib放在哪里,以便我的可执行文件可以找到它?

1 个答案:

答案 0 :(得分:3)

通过shards build --release --link-flags="-rpath @executable_path/../Frameworks -L pwd /vendor"进行编译来解决。我只需要将-rpath @executable_path/../Frameworks添加到链接器。