适用于Amazon EC2的交叉编译c ++二进制文件

时间:2017-09-26 08:13:09

标签: c++ amazon-ec2

我试图编译似乎相似的东西(两者都是Ubuntu 64bit)但是二进制文件不能由Ubuntu的Amazon实例运行(也是64位,但不知道更多)。 / p>

我看到一个线程建议旋转额外的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

1 个答案:

答案 0 :(得分:1)

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

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

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