5

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

4

2 回答 2

4

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

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

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

于 2013-02-04T04:10:30.637 回答
0

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

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

于 2013-02-04T04:10:42.687 回答