请教一个 Windows 下 VC 程序发布问题

2019-10-09 11:18:44 +08:00
 iriyave

自己写完一个程序,会用到 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 到程序目录?

3592 次点击
所在节点    C
2 条回复
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 所依赖的库。然后手动拷贝。
iriyave
2019-10-09 19:02:20 +08:00
@yougoUp 感谢解答,Dependencies 查看工具我这边用的是带 ui 的 https://github.com/lucasg/Dependencies。
好在我这边用到的 dll 不是很多,还是手动拷贝吧。我又查了几个网游里面的 dll,有的也是没有这些 dll 需要手动装的,估计某些大厂是有自己专用的打包工具吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX