【问题标题】:crosscompile c++ binary for Amazon EC2为 Amazon EC2 交叉编译 c++ 二进制文件
【发布时间】:2018-03-07 08:42:00
【问题描述】:

我试图只编译看起来相似的东西(都是 Ubuntu 64 位),但二进制文件不能由 Ubuntu 的亚马逊实例运行(它也是 64 位,但不知道更多)。

我看到一个线程建议旋转额外的 EC2 实例只是为了在那里编译,但这不是一个解决方案,因为我无法将源传输到外部,只能传输已编译的二进制文件和动态库。

正在考虑在我的计算机上创建一个虚拟环境以生成 EC2 的克隆并在那里编译,但可行吗?

内核信息:

uname -a
4.4.0-93-generic                 #116-Ubuntu SMP Fri Aug 11 21:17:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
ip-xxx-xxx-xxx-xxx 4.4.0-1035-aws #44-Ubuntu SMP Tue Sep 12 17:27:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

它似乎使用了一些亚马逊量身定制的内核?

文件信息:

file ./testBinary
./testBinary: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), too many program (2304)
file -Pelf_phnum=3000 ./testBinary 
./testBinary: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), corrupted program header size, corrupted section header size

【问题讨论】:

    标签: c++ amazon-ec2


    【解决方案1】:

    您无法真正“克隆”从某个 AMI 创建的 EC2 实例。因此,由于您没有任何关于您的库无法正常工作的详细信息,我建议您运行 Amazon Linux 而不是 Ubuntu。

    您可以在机器上的 Docker 容器中运行 Amazon Linux,并在那里构建您的库 (https://hub.docker.com/_/amazonlinux/)。这样,该库应该可以在任何带有 Amazon Linux 的 EC2 中毫无问题地运行。

    如果你想坚持使用 Ubuntu,至少你应该匹配 Ubuntu 版本(不仅仅是架构)和内核版本。

    【讨论】:

    • 添加了内核信息,至于运行错误,这是标准的“无法执行二进制文件:执行格式错误”错误,当您尝试运行不同类型的二进制文件时,我认为当您尝试时会发生类似的情况例如在 x86 上运行 ARM 二进制文件。
    • 这看起来确实像 arm 二进制文件或其他东西。但是您可以在目标系统上使用简单的file /path/to/your/executable 开始调试,看看它是什么样子的。
    • 来自文件 ./executable 的新信息 - 我试图寻找这个输出,但我发现有人试图破解一个文件受到反汇编保护的程序。这个 testBinary 我从源代码编译自己,并没有对它做任何事情。如果满足所有依赖项,则在具有 ubuntu 的物理计算机上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多