V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iriyave
V2EX  ›  C

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

  •  
  •   iriyave · 2019-10-09 11:18:44 +08:00 · 3636 次点击
    这是一个创建于 1909 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    2 条回复    2019-10-09 19:02:20 +08:00
    yougoUp
        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 所依赖的库。然后手动拷贝。
    iriyave
        2
    iriyave  
    OP
       2019-10-09 19:02:20 +08:00
    @yougoUp 感谢解答,Dependencies 查看工具我这边用的是带 ui 的 https://github.com/lucasg/Dependencies。
    好在我这边用到的 dll 不是很多,还是手动拷贝吧。我又查了几个网游里面的 dll,有的也是没有这些 dll 需要手动装的,估计某些大厂是有自己专用的打包工具吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:11 · PVG 04:11 · LAX 12:11 · JFK 15:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.