复制的可执行文件是否会在没有库的新计算机上运行

Will a copied executable run on a new machine without the libraries

本文关键字:计算机 运行 可执行文件 是否 复制      更新时间:2023-10-16

如果我在一个安装了许多库的 linux 盒子上编译一个C++程序(例如 Boost),然后将该可执行文件复制到没有这些库的新 linux 盒子中,可执行文件还能正常运行吗?

这在很大程度上取决于特定的库。有三种类型的库:

  • 仅标头库 - 这些依赖项在编译时解析。
  • 静态库 - 这些依赖项在链接时解析。
  • 共享(动态)库 - 这些依赖项在运行时解析。

大多数 Boost 库都是仅标头的:它们在链接时不需要单独编译的库二进制文件或特殊处理。其他库是静态的,即它们仅在构建时需要链接。目标计算机上必须可用的唯一库是动态(共享)库;如果没有动态库依赖项,则复制可执行文件并设置适当的权限将正常工作。

库可以是静态链接的(在这种情况下,它们被复制到可执行文件中)或动态链接的(在这种情况下,它们由系统在运行时从自己的副本加载)

几乎所有的库都是动态的 - 它只允许许多程序使用代码的一个副本,并且意味着您只能更新单个文件来修复错误。