【问题标题】:Will a copied executable run on a new machine without the libraries复制的可执行文件是否会在没有库的新机器上运行
【发布时间】:2013-02-04 04:06:38
【问题描述】:

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

【问题讨论】:

  • 在构建系统上安装了哪些库并不重要,重要的是链接到哪些库以及它们是静态链接还是动态链接。

标签: c++ linker executable


【解决方案1】:

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

  • 仅头文件库 - 这些依赖关系在编译时解决。
  • 静态库 - 这些依赖关系在链接时解决。
  • 共享(动态)库 - 这些依赖关系在运行时解决。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2012-03-08
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多