在另一台计算机上运行a.out

6
我已经成功在我的电脑(Ubuntu 12)上编译了一个程序(包括SDL),a.out 可以正常运行!但是,如果我把 a.out 发送给朋友,它就无法正常工作(仅显示简单的错误消息 "Can't be run.." 或其他)。但如果我在朋友的电脑上重新编译相应的源文件,它便可以正常工作!
我该如何打包/编译/制作程序才能使其在其他计算机上运行?

2
他可能没有兼容的库版本 - SDL,glibc,甚至是libstdc++。你有什么版本,他有什么版本? 你可以尝试静态链接二进制文件,否则你将不得不编译支持所需最低库版本的代码。 - Rup
可能需要对可执行文件进行chmod操作,但下面的答案适用且是我建议前进的方式。 - mathematician1975
11
那是一个很好的问题。在四十年里,没有人提出了一个简单的答案。 - Mike Seymour
2个回答

5
可执行文件通常是针对特定环境/机器创建的。即使涉及相同的处理器/硬件,也可能存在对库的依赖关系,这可能会阻止可执行文件在其他机器上运行。
您能否只发送源代码并附上编译说明?假设没有NDA或其他阻止该方法的问题(我之所以建议是因为您提到这对您有效)。
当然,在最后,它是可能的,毕竟这就是二进制文件的分发方式,但它们将被精心构建,并且将具有静态链接库(即所有内容都是可执行文件的一部分)。

我现在没有源代码,在这里的代码片段应该会有相同的效果:http://lazyfoo.net/SDL_tutorials/lesson01/linux/cli/index.php - user1511417
我认为SDL是问题所在...不知道。 - user1511417
@user1511417,很抱歉我对此不太熟悉。但是你所经历的(软件分发)问题/困境并不罕见。 - Levon
我该如何将SDL等库链接到我的可执行文件中? - user1511417
@user1511417 如上所述,很遗憾我不熟悉SDL。我认为这实际上是一个与您发布的一般问题不同的问题(尽管当然相关)-我会发布一个新的和不同的问题来回答那个具体的后续问题。 - Levon

2
请让您的朋友按照以下步骤操作:
 chmod +x a.out
 ldd a.out

他看到了什么?我假设,当然,两个环境在很大程度上是相似的(例如,都运行Ubuntu等)。


我认真地想,这是他所需要的。此外,如果可能的话,当源代码可用时应避免分发二进制文件(我猜这里没有涉及NDA)。 - Aftnix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接