在哪里放一个我的水晶可执行文件使用的.dylib文件?

问题描述 投票:1回答:1

我正在尝试使用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="-Lpwd/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放在哪里,以便我的可执行文件可以找到它?

macos frameworks shared-libraries dynamic-linking crystal-lang
1个回答
3
投票

通过使用shards build --release --link-flags="-rpath @executable_path/../Frameworks -Lpwd/vendor"进行编译来计算出来。我只需要将-rpath @executable_path/../Frameworks添加到链接器中。

© www.soinside.com 2019 - 2024. All rights reserved.