【发布时间】:2013-02-04 04:06:38
【问题描述】:
如果我在安装了许多库(例如 Boost)的 linux 机器上编译 C++ 程序,然后将该可执行文件复制到没有这些库的新 linux 机器,该可执行文件还能正常运行吗?
【问题讨论】:
-
在构建系统上安装了哪些库并不重要,重要的是链接到哪些库以及它们是静态链接还是动态链接。
标签: c++ linker executable
如果我在安装了许多库(例如 Boost)的 linux 机器上编译 C++ 程序,然后将该可执行文件复制到没有这些库的新 linux 机器,该可执行文件还能正常运行吗?
【问题讨论】:
标签: c++ linker executable
这在很大程度上取决于特定的库。有三种类型的库:
大多数 Boost 库是header-only:它们在链接时不需要单独编译的库二进制文件或特殊处理。其他库是静态的,即它们仅在构建时用于链接。唯一必须在目标机器上可用的库是动态(共享)库;如果您没有动态库依赖项,则复制可执行文件并设置适当的权限即可。
【讨论】:
库可以静态链接(在这种情况下它们被复制到可执行文件中)或动态链接(在这种情况下它们由系统在运行时从其自己的副本加载)
几乎所有的库都是动态的——它只允许许多程序使用一个代码副本,这意味着您只能更新一个文件来修复错误。
【讨论】: