如何将库合并到可执行文件中,以便用户不需要 DLL?
How can I incorporate libraries into my executable, so that users don't need to have the DLLs?
我正在使用ITK和VTK开发软件,一切都进展顺利。 但是,我想将软件部署到未安装 ITK 或 VTK 的最终用户计算机上。 当我构建软件并在未安装 ITK 或 VTK 的计算机上运行它时,我收到错误,例如"无法加载 libItkBasicFilters.dll"这是完全有道理的 - 机器上没有这样的 DLL。
我不能指望我的所有用户都安装 ITK 以便他们可以运行我的软件 - 我怎样才能让他们只需要运行我的可执行文件,他们就可以享受该软件? 恐怕我对这些库的了解还不够好——所以如果你能给我任何想法,那将是非常有帮助的。
您有两个选择:
- 将这些库的安装程序添加到安装程序中,并在系统上找不到库时自动运行它。如果您有安装程序,这就是通常的做法,在这种情况下是首选选项。
- 使用库的静态版本。由于库使用 BSD 许可证,因此您可以执行此操作(如果您还没有静态库,只需将它们重新编译为静态库)。但是,如果需要更新库,它将占用目标计算机上的更多空间,并且需要重新安装软件(可以在不重新编译依赖应用程序的情况下更新.dlls以进行错误或安全问题修复),但是如果您希望用户只是获取.exe并启动它,这是唯一的选择。
相关文章:
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 为什么output_editor Concept不需要output_e迭代器标记
- 在除法中不需要四舍五入
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 将值从另一个数组写入数组,不包括不需要的值 C++
- C++ 写入路径名中包含不需要的空字符的文件
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 使用 assimp 加载模型 - 不需要提升?
- 为什么转换函数声明不需要至少一个定义类型说明符
- 返回不需要的值的二叉搜索程序
- 当我不需要数据库中的所有值时,如何部分初始化 c++ 对象?
- C++:用户输入会产生不需要的行为
- 如果用户不小心给出了不正确的数据类型,cin 如何工作?
- 为什么共享内存(在IPC中)不需要上下文切换?这是内核空间的内存,可以映射到用户空间
- 为什么 while 循环不需要用户在 C++ 中输入
- 创建库库,以便最终用户不需要原始库
- 如何制作一个不需要用户使用特定版本的Visual Studio的c++ API
- 如何将库合并到可执行文件中,以便用户不需要 DLL?