Linux 如何使用联机获得的汇编代码?

Linux 如何使用联机获得的汇编代码?,linux,assembly,Linux,Assembly,我有一些C代码,我想优化。事实证明,英特尔C编译器(ICC)在这方面比GCC做得好得多,但我没有该编译器的副本,而且非常昂贵。但是,我可以使用ICC编译它,并在上获取程序集 如果我将此程序集复制并粘贴到文本文件中,那么如何将其转换为正常运行的可执行文件?您首先需要确保godbolt.org编译的运行时环境与您的运行时环境足够相似(祝您好运),因为例如,您可能正在使用windows,而godbolt.org可能正在使用linux(或者反过来),因此当您将程序集带到系统时,您可能能够将其转换为目标代

我有一些C代码,我想优化。事实证明,英特尔C编译器(ICC)在这方面比GCC做得好得多,但我没有该编译器的副本,而且非常昂贵。但是,我可以使用ICC编译它,并在上获取程序集


如果我将此程序集复制并粘贴到文本文件中,那么如何将其转换为正常运行的可执行文件?

您首先需要确保godbolt.org编译的运行时环境与您的运行时环境足够相似(祝您好运),因为例如,您可能正在使用windows,而godbolt.org可能正在使用linux(或者反过来),因此当您将程序集带到系统时,您可能能够将其转换为目标代码,但它仍然不会链接,也不会运行

然后,您需要为您的平台找到一个与godbolt.org的英特尔C编译器生成的汇编语法兼容的汇编程序,以便从汇编文件生成目标文件。(祝你好运。)

然后,您需要查找“英特尔C编译器”生成的代码所需的任何和所有运行时库(可再发行文件)。(祝你好运。)

最后,您需要获得一个链接器,将生成的对象文件与运行库链接起来,以生成一个可执行文件。(祝你好运。)


有时我们需要诚实的答案来回答我们的问题,这样我们才能意识到我们的想法是多么的不可能。

我投票将这个问题作为离题来结束,因为这是一种试图绕过许可的行为,可能是非法的。我不认为为我自己的代码复制程序集是非法的,是吗?@MikeNakis,我同意你的观点,这句话“这并不违法“太强了,太欺骗性了。软件法是复杂的。你不能在广场上免费播放一部电影给每个人看,尽管没有人在复制任何东西。我很确定ICC许可证不允许出租,OP或Matt Codebolt可能会因此而陷入麻烦。顺便说一句,如果您能制作出合理简单的瓶颈例程示例,stackexchange站点codereview可能会帮助您“免费”优化g++输出(好吧,成本是准备足够小的独立源代码,然后将获得的知识提取回大项目中)。此外,你可能会收到大量的建议,如何以完全不同的更有效的方式进行,这至少需要1个月的重构,而提出建议的人最终可能不正确。:))但是,嘿,这是免费的,如果运气不好的话,雇佣一名专业人士也可能会有类似的结果。作为一名学生,你可以免费获得英特尔C编译器的旧版本。也许用那个?我想OP说的是他自己的几个例程,所以实际上他们所需要的只是从godbolt复制asm,并调整汇编程序的语法。这让我想知道为什么这个Q甚至存在,如果有人缺乏这样做的知识,那么他必须深入他的工具链文档,学习如何将汇编文件与项目的其余部分组装在一起,使用哪个汇编程序,或者如何使用替代程序(以最小化语法调整)。另外,如果一个人不熟悉汇编,这可能是非常容易出错的工作,可能不值得额外的1-5%的性能。@Ped7g好吧,这是合理的,我在开始时也是这么想的,但在最后一句话中她说“如果我将此程序集复制并粘贴到文本文件中,如何将其转换为正常运行的可执行文件?”?“这让我相信,她实际上在考虑在一个汇编文件中获取整个程序的所有汇编代码,并从中生成一个可执行文件。谢谢。在这种特殊情况下的问题是矢量化,这在icc中要好得多。我希望它至少快一倍。我的系统是linux,我假设它和他们的一样,但我可能错了。