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

时间:2013-02-04 04:06:39

标签: c++ linker executable

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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