2012-07-11 72 views
5

我已经在我的计算机(Ubuntu 12)上成功编译了一个程序(包括SDL),并且a.out运行得很好!在另一台计算机上运行a.out

现在,如果我将a.out发送给朋友,它就不起作用。 (给出简单的错误信息("Can't be run..")或其他东西) 但是,如果我再次在我的朋友计算机上编译相应的源文件,它的工作原理!

如何打包/编译/让我的程序在其他计算机上运行?

+2

他可能没有兼容版本的库 - SDL,glibc,甚至可能是libstdC++。你有什么版本,他有什么版本?您可能能够静态链接您的二进制文件,否则您将不得不编译您希望支持的最低版本库。 – Rup 2012-07-11 13:03:45

+0

可能需要对exe文件进行chmod操作,但是下面的答案适用,并且我会建议 – mathematician1975 2012-07-11 13:04:33

+9

这是一个很好的问题。四十年来,没有人提出一个简单的答案。 – 2012-07-11 13:05:23

回答

5

可执行文件通常特定于创建它们的环境/机器。即使涉及相同的处理器/硬件,也可能依赖库来阻止可执行文件在其他机器上运行。

你可以发送源代码的指令来编译吗?假设没有NDA或其他问题阻止这种做法(我只建议,因为你提到这个工作适合你)

当然,最后它是可能,毕竟这是如何分发二进制文件,但他们将被精心构造,并将有静态链接库(即一切都是可执行文件的一部分)。

+0

我现在还没有源代码,但是这里的代码片段应该具有相同的效果:http://lazyfoo.net/SDL_tutorials/lesson01/linux/cli/index.php – user1511417 2012-07-11 13:07:07

+0

我认为SDL是问题.. dunno – user1511417 2012-07-11 13:08:49

+0

可能@ user1511417,我不熟悉它。但是,这并不是一个你经历过的不常见的问题/困境(分发软件)。 – Levon 2012-07-11 13:09:39

0

请你的朋友做到以下几点:

chmod +x a.out 
ldd a.out 

他看到了什么?当然,我认为这两种环境基本上是相似的(例如,两者都运行Ubuntu等)。

+0

我认真想,这是他需要的。此外,如果可以的话,在源代码可用时分发二进制文件是你应该避免的(我猜这里没有涉及NDA)。 – Aftnix 2012-07-11 13:32:38

相关问题