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

C++ 在另一台计算机上运行a.out,c++,linux,sdl,C++,Linux,Sdl,我已经在我的计算机(Ubuntu 12)上成功地编译了一个程序(包括SDL),并且a.out运行得很好 现在,如果我把a.out发送给朋友,它就是不起作用。(给出简单的错误消息(“无法运行…”“)或其他信息) 但是如果我在我朋友的电脑上重新编译相应的源文件,它就可以工作了 如何打包/编译/使程序在其他计算机上运行?可执行文件通常特定于创建它们的环境/机器。即使涉及相同的处理器/硬件,也可能存在对库的依赖,这可能会阻止可执行文件仅在其他机器上运行 你能发送源代码和编译指令吗?假设没有NDA或其他问

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

现在,如果我把
a.out
发送给朋友,它就是不起作用。(给出简单的错误消息(
“无法运行…”“
)或其他信息) 但是如果我在我朋友的电脑上重新编译相应的源文件,它就可以工作了


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

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

你能发送源代码和编译指令吗?假设没有NDA或其他问题阻止这种方法(我只建议,因为你提到了这对你有用)


当然,最终还是有可能的,毕竟二进制文件就是这样分发的,但它们将被仔细构造,并具有静态链接库(即所有内容都是可执行文件的一部分)。

请您的朋友执行以下操作:

 chmod +x a.out
 ldd a.out

他看到了什么?当然,我假设这两个环境基本相似(例如,都运行Ubuntu等)

他可能没有兼容版本的库——SDL、glibc,甚至可能是libstdc++。你有什么版本,他有什么版本?你可以通过静态链接你的二进制文件,否则你将不得不编译你想要支持的最低库版本。可能需要在exe上执行chmod,但下面的答案适用,这是前进的方向。我建议这是一个好问题。四十年来,没有人能给出一个简单的答案。我现在还没有找到来源,但这里的这段话应该有同样的效果:我认为SDL是问题所在。。dunno@user1511417很可能,不幸的是,我对它不熟悉。但这并不是你经历过的一个罕见的问题/困境(分发软件)。例如,我如何将SDL与我的可执行文件链接?@user1511417如前所述,不幸的是,我不熟悉SDL。我认为这实际上是一个不同于您发布的一般问题(当然是相关的:)-我会发布一个新的和不同的问题,以获得对具体后续问题的答案。我认真地认为,这是他需要的。此外,如果可以的话,应该避免在源代码可用时分发二进制文件(我想这里不涉及NDA)。