如果编译后的源代码特定于编译时所使用的硬件,我们该如何分发?

异步混淆

假设我们使用一种编译语言,例如C++现在假设一个框架示例QtQt它的源代码可公开获得,并具有供用户下载二进制文件并允许用户使用其API的选项。但是我的问题是,当他们编译代码时,所有代码都被编译为特定的HardWare,操作系统。我了解有多少软件需要针对不同类型的操作系统(包括32位和64位)进行重新编译,并在其网站上提供了多次下载,但是,进一步说明它也是特定于硬件的,又怎么走得更远,最终导致编译后的软件重新发行执行极其令人沮丧的生产?

塞尔比

代码被编译为目标基本CPU(例如32位x86,x86_64或ARM),但不一定编译为特定处理器,例如Core i9-10900K。默认情况下,编译器通常会生成代码以在最广泛的处理器上运行。英特尔和AMD保证了在较新的处理器上运行该代码的向前兼容性。编译器通常会提供开关,以进行优化以在具有新指令集的新型处理器上运行,但是您很少这样做,因为并非所有客户都具有该配置。或者,也许您两次构建代码(一次用于较旧的处理器,一次优化用于较新的处理器)。

还有一个称为交叉编译的概念。在那里,编译器为与运行它的处理器完全不同的处理器生成代码。在Mac上构建iOS应用时就是这种情况。编译器本身是一个x86_64程序,但是它生成的ARM CPU指令集可以在iPhone上运行。

代码被编译并与一组特定的OS API和外部运行时库(包括C / C ++运行时)链接。如果您希望代码在Windows 7或Mac OSX Maverics上运行,则不会静态链接到仅在Windows 10或Mac OS Big Sur上存在的API。该代码可以编译,但不能在较旧的操作系统上运行。相反,您可以采取一种解决方法,或者有条件地加载该API(如果有)。Microsoft和Apple提供了相同的运行时库API,以便在以后的OS版本中可用,从而提供了向前兼容性。

此外,Windows支持在64位芯片和OS上运行32位进程。Mac甚至可以在今年晚些时候推出的基于ARM的新设备上模拟x86_64。但是我离题了。

至于Qt,他们实际上为参考二进制下载提供了几种预配置。因为至少在Windows上,MSVCRT(Visual Studio的C运行时API)与Visual Studio的不同编译器版本紧密相关。因此,他们提供了各种下载以匹配您要为其构建代码的配置(32位,64位,VS2017,VS2019等)。因此,当您将具有第三方依赖关系的完整应用程序组合在一起时,必须考虑其中的一些构建,链接和CPU / OS配置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们可以编译Windows程序的源代码吗?

我们如何用C编译内核代码?

即使我们使用稍后定义的常量,如何编译代码也是如此?

如何使用我下载的Visual Studio编译C ++源代码

如果C ++编译为机器代码,为什么我们需要安装“运行时”?

使用shellscript编译我的源代码(C)

在使用布局文件的Middleman中,我们如何在编译时为特定的html文件附加js文件?

如果我们混淆了代码,那么我们该如何调试和修改它呢?

如何使用Cmake编译Zlib源代码

使用apt /从源代码编译时,R处理某些字符的方式有所不同

我们如何避免Babel编译的文件中的样板代码?

我们可以在Spring MVC项目源代码中使用现有的Servlet吗,如果可以,那么如何配置我的web.xml文件

如何编译Minix源代码?

如何从源代码编译readline?

如何从源代码编译InfluxDB

我们可以在方法内部创建IIB(实例初始化块)吗?如果我们不能为什么不给出编译时错误呢?

我们如何编译多输出keras模型

iOS使用修改后的源代码编译ffmpeg

使用 gcc 编译时禁用所有明显的消除(不更改我的源代码!)

从源代码编译软件时如何解决依赖关系

使用g ++编译C ++源代码时的VLA

如何从源代码编译我自己的glibc C标准库并使用它?

从源代码编译后配置unixODBC

使用javax.tools.JavaCompiler编译源代码时如何设置类路径?

在源代码中使用硒时,如何从命令行编译Java程序?

是否有任何在线编译器API,如果我输入源代码,它将在编译时返回结果(或任何错误)?

当我们想加入特定文件时,如何在分割后加入tar文件

如何从源代码编译和使用liboverlay-scrollbar?

如何使apache2使用从源代码编译的PHP 5.4.5?