如果我在安装了许多库的Linux机器上编译C ++程序(例如Boost)然后将该可执行文件复制到没有这些库的新Linux机器箱,那么可执行文件是否仍能正常运行?
答案 0 :(得分:3)
这在很大程度上取决于具体的库。有三种类型的库:
大多数Boost库都是header-only:它们在链接时不需要单独编译的库二进制文件或特殊处理。其他库是静态,即仅在构建时需要链接。目标机器上必须唯一可用的库是动态(共享)库;如果您没有动态库依赖项,复制可执行文件并设置适当的权限将正常工作。
答案 1 :(得分:0)
库可以静态链接(在这种情况下将它们复制到可执行文件中)或动态链接(在这种情况下,它们在运行时由系统从其自己的副本加载)
几乎所有的库都是动态的 - 它只允许许多程序使用一个代码副本,这意味着你只能更新一个文件来修复bug。