我想知道为什么必须从每台 linux 机器上的源代码重新编译可执行文件(用 c++ 编写),即使机器的软件和硬件相同?
我有一个用 c++ 编写的搜索引擎,每次我想将它移动到新的 linux 机器上以使其工作时,我都必须重新编译它。
有任何想法吗?
我想知道为什么必须从每台 linux 机器上的源代码重新编译可执行文件(用 c++ 编写),即使机器的软件和硬件相同?
我有一个用 c++ 编写的搜索引擎,每次我想将它移动到新的 linux 机器上以使其工作时,我都必须重新编译它。
有任何想法吗?
如果您问为什么在 Linux-X 上编译的可执行文件不能在 Linux-Y 上运行,那么原因可能是动态库 (.so) 丢失或找不到。
编辑:哦,对不起,看起来我没有很好地阅读你的问题。去掉了讽刺。
通常不需要重新编译。许多应用程序都是作为可执行文件分发的,它们运行良好。
当您只是复制可执行文件并在另一台机器上运行它时,您会遇到什么错误?
也许问题出在您复制可执行文件的方式上,它可能会损坏它。
重新编译可确保您在计算机上获得最佳性能,因为每次运行配置脚本时都会查找依赖项和设置。这也确保了软件的开放性,因为它的源始终可用并且可以由适当的代理(即我们)修改。
情况不一定如此。例如,考虑如何安装 Ubuntu 软件包 - https://askubuntu.com/questions/162477/how-are-packages-actually-installed-via-apt-get-install
显然,这些不是从目标机器上的源代码编译的,而是作为预构建的二进制文件安装的。话虽如此,在将运行它们的机器上从源代码构建二进制文件通常是一个好主意,因为您将避免潜在的问题,例如在 Linux X 上构建和运行时可能发生的共享库(例如 libc)不兼容在 Linux Y 上。