如果我在安装了许多库(例如 Boost)的 linux 机器上编译 C++ 程序,然后将该可执行文件复制到没有这些库的新 linux 机器,可执行文件是否仍能正常运行?
最佳答案
这在很大程度上取决于特定的库。那里有三种库:
- 仅 header 库 - 这些依赖项在编译时解析。
- 静态库 - 这些依赖关系在链接时解析。
- 共享(动态)库 - 这些依赖关系在运行时解决。
大多数 Boost 库都是 header-only :它们不需要单独编译的库二进制文件或链接时的特殊处理。其他库是静态的,即仅在构建时才需要它们进行链接。唯一必须在目标机器上可用的库是动态(共享)库;如果您没有动态库依赖项,复制可执行文件并设置适当的权限就可以了。
关于c++ - 复制的可执行文件是否会在没有库的情况下在新机器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14680207/