自己写完一个程序,会用到 msvcr100,msvcp100,D3DX9_43 之类的 dll, 打包后在客户机上安装的时候,我都是安装 VC 运行库,DX9 发行包之类的, 这些 dll 就会安装到系统目录下了,程序就可以正常运行了。
最近看到一些大公司发布的网游,程序目录下面就带 msvcr100,msvcp100,D3DX9_43 这些 dll, 不知道这具体是怎么打包的,请教下几个问题: 1、这些 dll 在程序目录下而不在系统目录下,程序是否需要特殊处理,正常比如我使用 d3d,只是包含了头文件和 lib 文件,应该是动态加载,优先加载程序目录下的 dll,是否需要改成 loadlibrary 手动加载? 2、这些 dll 随程序一起打包,与直接安装运行库有什么区别,安装后系统如果没有安装对应的 vc 运行库或者 dx 发行包,程序是否还能正常运行? 3、这些 dll 随程序一起打包是怎么操作,是有类似 QT 的 windeployqt 之类的工具?还是通过相关的 Dependencies 查看工具然后手动复制这些 dll 到程序目录?
1
yougoUp 2019-10-09 17:44:13 +08:00
第一个问题,这是要给 DLL 搜索顺序问题,可参考微软提供的说明:
https://docs.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-search-order?redirectedfrom=MSDN, 中文的详细说明 : https://www.cnblogs.com/tocy/p/windows_dll_searth_path.html 第二个问题,如果你对前一个问题有所了解,你应该知道了,这个本质上没有什么区别,只是在 DLL 顺序上,定位到 dll 的位置不同而已。如果没有安装对应的库,而自己本身有没有携带,程序肯定时跑不起来的。运行时会提示缺少某一个 dll。 第三个问题,工具也是有的,只不过没 QT 的 windeployqt 那么智能,全部给你拷贝过来,window 下有个 Depends.exe 工具,你可以百度,这个可以解析出 exe 所依赖的库。然后手动拷贝。 |
2
iriyave OP @yougoUp 感谢解答,Dependencies 查看工具我这边用的是带 ui 的 https://github.com/lucasg/Dependencies。
好在我这边用到的 dll 不是很多,还是手动拷贝吧。我又查了几个网游里面的 dll,有的也是没有这些 dll 需要手动装的,估计某些大厂是有自己专用的打包工具吧。 |