首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在其他笔记本电脑上运行在我的笔记本电脑gcc环境中创建的可执行文件a.out?

如何在其他笔记本电脑上运行在我的笔记本电脑gcc环境中创建的可执行文件a.out?
EN

Stack Overflow用户
提问于 2016-12-08 00:12:51
回答 2查看 504关注 0票数 1

我用c语言写了一个程序代码,在gcc编译器上编译执行。我想共享程序的可执行文件,而不是共享实际的源代码。有没有办法在不透露实际源代码的情况下分享我的程序,这样可执行文件就可以在其他安装了gcc编译器的计算机上运行??

EN

回答 2

Stack Overflow用户

发布于 2016-12-08 01:34:53

有没有办法在不透露实际源代码的情况下分享我的程序,这样可执行文件就可以在其他安装了gcc编译器的计算机上运行?

TL;博士:是的,它提供了比仅仅有GCC更大程度的相似性。只需将二进制文件和任何需要的辅助文件复制到兼容系统并运行它。

更详细地说

在没有源代码的情况下分发编译后的二进制文件,以便在构建这些二进制文件的机器之外的机器上执行,这是很常见的。这种分发模式确实存在潜在的兼容性问题(如下所述),但源代码分发也是如此。概括地说,您只需将二进制文件和任何需要的支持文件安装(复制)到兼容系统上的适当位置并执行它们。这是大多数商业软件的分发方式。

架构依赖

编译后的二进制文件肯定是特定于特定硬件架构的,或者在某些特殊情况下,特定于两个或多个架构(例如,旧的Mac通用二进制文件)的一个小的、预先确定的集合。您不能在硬件上运行二进制文件,但“架构”与CPU模型是完全不同的。

例如,实现x86_64体系结构的CPU非常广泛。大多数以该架构为目标的程序都可以在任何这样的CPU上运行。实际上,x86架构与x86_64非常相似,因此为x86构建的大多数程序也可以在x86_64上运行(但反之亦然)。可以引入更细粒度的硬件依赖,但在默认情况下通常不会这样做。

操作系统依赖性

此外,大多数二进制文件都是为在主机操作系统上下文中运行而构建的。您将不能在与构建二进制文件的操作系统太不同的操作系统上运行该二进制文件。

例如,Linux二进制文件不能(直接)在Windows上运行。Windows二进制文件不能(直接)在OS X上运行。

库依赖

此外,针对共享库构建的程序需要在运行时环境中提供每个所需共享库的兼容版本。这不一定要与构建时的版本完全相同;这取决于库,使用了哪些函数和数据,以及这些函数和数据是否以及如何随着时间的推移发生了变化。

您可以通过静态链接每个所需的库,直到并包括C标准库,或者通过将共享库与您的二进制文件一起分发来避免这个问题。然而,仅仅接受这个问题是相当常见的,因此只支持使用您的二进制发行版的所有可能环境的子集。

其他

确实存在许多其他潜在的兼容性问题,但它们中的任何一个都不太可能让您对自己编写并想要分发的程序感到惊讶。例如,如果你在你的程序中使用GPU,那么它可能需要一个nVidia图形处理器,但这样的要求肯定对你来说是非常熟悉的。

票数 3
EN

Stack Overflow用户

发布于 2016-12-08 00:24:23

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

一个只使用“标准库”和静态链接所有库的程序不需要任何其他依赖(从这个意义上说,它需要的所有代码都在二进制文件本身中,或者进入系统本身的-being部分的OS库中-已经在系统中)。

您必须静态地链接标准库。否则,只有当编译器的标准库版本默认安装在您的操作系统中(通常不能依赖)时,它才能工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41022219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档