为什么必须重新编译可执行文件

时间:2012-08-16 09:46:43

标签: c++ linux executable

我想知道为什么必须从每个linux机器上的源代码重新编译可执行文件(用c ++编写),即使这些机器的软件和硬件都相同?

我有一个用c ++编写的搜索引擎,每次我想在新的linux机器上移动它时都必须重新编译它才能使它工作。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

如果您问为什么在Linux-X上编译的可执行文件不能在Linux-Y上运行,那么原因可能是动态库(.so)丢失或无法找到。

编辑:哦对不起,看起来我没有读好你的问题。删除了讽刺。

答案 1 :(得分:2)

通常不需要重新编译。许多应用程序作为可执行文件分发,它们工作正常。

当您复制可执行文件并在另一台计算机上运行时会出现什么错误?

可能问题在于你复制可执行文件的方式,它可能会破坏它。

答案 2 :(得分:1)

重新编译确保您在计算机上获得最佳性能,因为每次运行配置脚本时都要查找依赖项和设置。这也确保了软件的开放性,因为软件的来源始终可用,并且可由适当的代理商修改 - 即我们。

答案 3 :(得分:0)

不一定是这种情况。考虑如何安装Ubuntu软件包 - https://askubuntu.com/questions/162477/how-are-packages-actually-installed-via-apt-get-install

显然,这些不是从目标计算机上的源代码编译的,而是作为预构建的二进制文件安装的。话虽如此,通常最好从他们将运行的机器上的源代码构建二进制文件,因为您将避免潜在的问题,例如在Linux X上构建内容并运行时可能出现不兼容的共享库(如libc)在Linux Y.