栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将Yesod部署到Heroku,无法静态构建

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将Yesod部署到Heroku,无法静态构建

我不知道Yesod是什么,但我 确切 知道您其他每个错误的含义。

首先,你应该 尝试静态链接。您得到的警告是完全正确的: 如果 您静态链接并使用要获得警告的例程之一,则必须安排在与libc.so.6版本
完全相同 的系统上运行您在构建时使用过。

与普遍的看法相反,静态链接在Linux上生成的是 更少 但不是更多的可移植可执行文件。

您的其他(静态)链接错误是由于

libopenssl.a
链接时丢失而引起的。

但是,让我们假设您将走“明智的”路线,并使用动态链接。

对于动态链接,Linux(和大多数其他UNIX)支持向后兼容:旧的二进制文件继续在较新的系统上运行。但是它们不支持前向兼容性(在较新的系统上构建的二进制文件通常
不会 在较旧的系统上运行)。

但这就是您要尝试的:您在具有glibc-2.14(或更高版本)的系统上构建,并且在具有glibc-2.13(或更高版本)的系统上运行。

你需要知道的另一件事是,glibc的是由一些200+二进制文件必须全部匹配的 准确 。两个关键的二进制文件

/lib/ld-linux.so
/lib/libc.so.6
(但还有更多:
libpthread.so.0
libnsl.so.1
,等等)。如果其中一些二进制文件来自不同版本的glibc,则通常会崩溃。这就是您尝试将glibc-2.14
libc.so.6
放在
LD_LIBRARY_PATH
-它不再与系统匹配时所得到的
/lib/ld-linux

那么有什么解决方案呢?有几种可能性(难度越来越大):

  1. 您可以将
    ld-2.14.so
    /lib/ld-linux
    符号链接的目标)复制到目标系统,并显式调用它:
    /path/to/ld-2.14.so --library-path <whatever> /path/to/your/executable

这通常可以正常工作,但会混淆看着的应用程序

argv[0]
,并中断那些自己重新执行的应用程序。

  1. 您可以在较旧的系统上构建。

  2. 你可以使用

    appgcc
    (这个选项已经消失了,看到这为它曾经被描述)。

  3. 您可以设置与目标系统匹配的chroot环境,并在该chroot中进行构建。

  4. 您可以构建自己的Linux到旧版Linux交叉编译器



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412209.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号