如果我在安装了许多库(例如 Boost)的 linux 机器上编译 C++ 程序,然后将该可执行文件复制到没有这些库的新 linux 机器,该可执行文件仍然可以正常运行吗?
问问题
1383 次
2 回答
4
这在很大程度上取决于特定的库。那里有三种类型的库:
- 仅头文件库- 这些依赖项在编译时解决。
- 静态库- 这些依赖关系在链接时解决。
- 共享(动态)库- 这些依赖关系在运行时解决。
大多数 Boost 库是仅头文件:它们不需要单独编译的库二进制文件或链接时的特殊处理。其他库是静态的,即它们仅在构建时用于链接。唯一必须在目标机器上可用的库是动态(共享)库;如果您没有动态库依赖项,则复制可执行文件并设置适当的权限将正常工作。
于 2013-02-04T04:10:30.637 回答
0
库可以静态链接(在这种情况下它们被复制到可执行文件中)或动态链接(在这种情况下它们由系统在运行时从其自己的副本加载)
几乎所有的库都是动态的——它只允许许多程序使用一个代码副本,这意味着您只能更新一个文件来修复错误。
于 2013-02-04T04:10:42.687 回答