gpt4 book ai didi

dependencies - 如何生成没有依赖项的 Crystal 可执行文件?

转载 作者:行者123 更新时间:2023-12-04 03:19:45 24 4
gpt4 key购买 nike

我正在 Crystal 中编写程序,我打算编译并移动到其他系统执行。理想情况下,它应该没有依赖项,因为目标系统将是全新安装的 linux。

遗憾的是,我无法绕过 libc 依赖项,因此我大概必须在拥有我希望定位的最低版本 libc 的系统上编译可执行文件。我认为它应该是向前兼容的。

但是,我在使用 libssl 时遇到了困难。 Debian Wheezy 的默认安装似乎没有与 libssl 一起提供,因此在运行我的可执行文件时出现此错误:

error while loading shared libraries: libssl.so.1.0.0:
cannot open shared object file: No such file or directory

我认为这种依赖存在是因为我 require "http/client"在我的来源。但是,我不进行与 ssl 相关的调用,因为我只使用它来连接到不安全的网站。

我显然也依赖于 libevent-2.0.so.5 .大概所有的 Crystal 程序都可以。谁知道 Crystal 还有多少其他依赖项?

我的可执行文件必须在新安装的 linux 系统上运行。那么,如何生成没有依赖项的 Crystal 可执行文件?除了libc,我想。

最佳答案

在 Linux 中,您可以使用 ldd 列出可执行文件所需的共享库。命令。在 OSX 中,otool -L可以用于相同的目的。

通常,链接器会在构建可执行文件时使用共享库(如果它可以找到的话)。因此,您需要做的是强制链接器改用静态库。 (将来我们可能会向编译器添加一个标志以强制执行此选择)

您应该在/opt/crystal/embedded/lib 中找到其中一些静态库。我们使用这些来生成可移植的 Crystal 编译器。

为了使用这些库,您可以运行:

$ LIBRARY_PATH=/opt/crystal/embedded/lib crystal build my_app.cr

在考虑安装在标准位置的其他库之前,应该更喜欢该目录中可用的库。

不幸的是,OpenSSL 没有随 Crystal 一起发布,因此您必须复制或构建 libssl 的静态版本。和 libcrypto .无论如何,它是一个通用库,可在任何 Linux 发行版中使用。

关于 libc ,那就更棘手了。我们为使用旧 CentOS 和 Debian 发行版的发行版编译 Crystal 二进制文件,以使其与更多 libc 版本兼容。

关于dependencies - 如何生成没有依赖项的 Crystal 可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com