CMake:如何确定所有.DLL/.需要可执行文件的 SO 文件
CMake: how to determine all the .DLL/.SO files that are need for an executable?
假设我的程序需要几个DLL才能工作。我应该在我的发行版中向用户提供该 DLL。现在我需要QtCore4.DLL,QtGui4.DLL,msvcp90.DLL,msvcr90.DLL,mylib.DLL,Kernel32.DLL...
如果 CMake 可以获得 DLL 的完整列表(或 .所以)文件。然后我会从该列表中删除像"Kernel32.DLL"这样的项目,并将 DLL 复制到我的发行版中。
我不能保证下一个构建将在同一版本的Visual Studio上完成,因此硬编码路径如"C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT"或"E:\Qt\4.6.3"不适合搜索DLL。
谢谢!
你可以在Windows上使用Dependency Walker(或Visual Studio的cmd-line dumpbin工具)。但是,这不是真正的CMake解决方案,并且Cmake也没有真正的标准解决方案。
但是,有 InstallRequiredSystemLibraries 模块,您可以使用它来获取系统 dll(msvc[r|p]90.dll 使用 msvc 和 mingw10.dll使用 mingw)。
正如Andre所建议的那样,有InstallRequiredSystemLibraries用于查找/安装正确的C/C++运行时。还有 BundleUtilities 可用于查找应用程序、库和/或插件的其他依赖项。
它永远不能像运行时加载的插件那样拾取东西,但您可以将它们与应该使用的库目录一起添加。在最新版本的CMake中,已经进行了相当多的改进,以使BundleUtilities在所有平台上更加可靠。
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 应使用 CMake install 命令将可执行资源文件安装到何处?
- 为什么当我们想要运行可执行的 c++ 文件时,我们需要在可执行的 c++ 文件前面"./"?
- 如何告诉 clang 将调试符号放入可执行二进制文件中
- 从 Web UI 访问C++编译的可执行二进制文件
- 使C可执行/设置文件在任何计算机上运行
- 不是可执行格式:文件格式无法识别 GDB
- 如何制作不依赖于 .so 文件的可执行二进制文件
- 可执行测试文件没有运行测试
- 系统()调用批处理可执行流文件使程序在windows上重置