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

Jos*_*ain 5 c++ linker executable

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

das*_*ght 4

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

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

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