复制的可执行文件是否会在没有库的新计算机上运行
Will a copied executable run on a new machine without the libraries
如果我在一个安装了许多库的 linux 盒子上编译一个C++程序(例如 Boost),然后将该可执行文件复制到没有这些库的新 linux 盒子中,可执行文件还能正常运行吗?
这在很大程度上取决于特定的库。有三种类型的库:
- 仅标头库 - 这些依赖项在编译时解析。
- 静态库 - 这些依赖项在链接时解析。
- 共享(动态)库 - 这些依赖项在运行时解析。
大多数 Boost 库都是仅标头的:它们在链接时不需要单独编译的库二进制文件或特殊处理。其他库是静态的,即它们仅在构建时需要链接。目标计算机上必须可用的唯一库是动态(共享)库;如果没有动态库依赖项,则复制可执行文件并设置适当的权限将正常工作。
库可以是静态链接的(在这种情况下,它们被复制到可执行文件中)或动态链接的(在这种情况下,它们由系统在运行时从自己的副本加载)
几乎所有的库都是动态的 - 它只允许许多程序使用代码的一个副本,并且意味着您只能更新单个文件来修复错误。
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 在另一台计算机中运行 GTKMM 代码时未定义的符号
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- 这是否有意义,我的计算机只能并行运行4个线程
- 致命错误LNK1112:通过 vcvarsall .bat x86 运行构建'X86'模块计算机类型'x64'与目标计算机类型冲突
- Visual C 程序不在其他计算机中运行
- 构建计算机上的C++运行时版本与客户计算机
- 从另一台计算机运行opencv可执行文件
- 作为服务运行时连接到远程计算机的 WMI
- 有什么好方法可以指示计算机是否可以运行特定的程序/软件
- 在云计算机〔Azure〕上运行OpenCV代码
- 两台计算机必须有什么共同点才能运行相同的可执行文件
- 如何在另一台计算机(linux)上使用OpenCV运行c++库
- 我的应用程序"Qt"在我的计算机中运行,但在我朋友的计算机上无法运行
- 计算机视觉-在TensorFlow上运行C++inception-v3时出现非法指令错误
- 是否可以在多核计算机的单核上运行多线程应用程序
- 我的程序不能运行与计算机没有VS MSCR100D.dll丢失