【问题标题】:Is there anyway to include libc.so in a Lazarus/Free pascal compiled binary?无论如何在 Lazarus/Free pascal 编译的二进制文件中包含 libc.so 吗?
【发布时间】:2017-08-26 14:07:45
【问题描述】:

有没有在 Lazarus 或 Free Pascal 编译的二进制文件中包含 libc 库?我不想使用共享库,因为例如,如果我使用较新版本的 Libc 编译我的应用程序,它将无法在较旧的 Linux 上运行。

我想要这个,因为当我在较旧的 Linux 版本中运行我的应用程序时,终端中会显示以下错误:

./app: /lib64/libc.so.6: 找不到版本“GLIBC_2.14”(需要 ./app)

谢谢。

【问题讨论】:

  • 简单的答案是否定的。
  • 你试过 -Xt 编译选项吗? "-Xt 与静态库链接(-static 被传递给链接器)"
  • 简单的答案是否定的,除非您打算自己研究。

标签: glibc lazarus freepascal libc


【解决方案1】:

有没有在 Lazarus 或 Free Pascal 编译的二进制文件中包含 libc 库?

如果编译器支持-static 标志,并且不需要使用动态库,那么您的二进制文件将包含libc.a(使用的部分)的副本

Documentation 建议将-Xt 添加到链接行即可。

我不想使用共享库,因为例如,如果我使用较新版本的 Libc 编译我的应用程序,它将无法在较旧的 Linux 上运行。

通常不支持此(在较新版本上编译,在较旧版本上运行)。使用完全静态的二进制文件可能有效,但通常会因为其他神秘原因而失败。

最好的办法是在您计划支持的最旧操作系统上构建,使用chroot-ed 构建环境或在虚拟机内。

【讨论】:

  • libc 是特殊的,如果你想静态链接它,对 libc ini/finalization 的调用也可能需要在启动代码中修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多