有些库是在vs环境中即可编译 ,
有些是用cmake 编译.
cmake 的方式
https://cmake.org/download/
当然编译前要有,lib那些链接包的安装 包管理下载软件vcpkg .
https://github.com/Microsoft/vcpkg#quick-start
such as
cd <path to vcpkg>
.\vcpkg.exe install gperf:x64-windows gperf:x86-windows openssl:x64-windows openssl:x86-windows zlib:x64-windows zlib:x86-windows
cmake 生成dll时 ,要链接这些库
比如 32位 64位
mkdir build cd build cmake -A Win32 -DTD_ENABLE_DOTNET=ON -DCMAKE_TOOLCHAIN_FILE=<path to vcpkg>/scripts/buildsystems/vcpkg.cmake ../../.. cmake --build . --config Release cmake --build . --config Debug cd .. mkdir build64 cd build64 cmake -A x64 -DTD_ENABLE_DOTNET=ON -DCMAKE_TOOLCHAIN_FILE=<path to vcpkg>/scripts/buildsystems/vcpkg.cmake ../../.. cmake --build . --config Release cmake --build . --config Debug
最终想要的dll就生成了
对于 32位 64位dll 以及缺相关依赖问题 文章在下
dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
监测dll 中依赖 的dll
http://www.dependencywalker.com/
微软工具包
https://docs.microsoft.com/zh-cn/sysinternals/
查看运行的应用程序引入的dll .
https://docs.microsoft.com/zh-cn/sysinternals/downloads/listdlls
最新的vc++运行库
https://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msvc-160
总结就是, vc++ 程序运行也跟c#一样有运行库.如果没有安装,则会出现明明有那个dll 还跳窗提示缺少依赖, 那是因为dll内程序也是依赖其他dll.
我总结这个其他dll 64位程序用的dll是在system32, 32位程序用的是C:\Windows\SysWOW64 .至于 为何这样上边 dll文件32位64位检测工具以及Windows文件夹SysWow64的坑 已经解释了
我还推测,运行库会根据不同的系统,把库dll 安装到 system32 和SysWOW64 , 中间dll 也是不同的系统不同版本号. 不同的vs 开发的程序需要不同的运行库,比如vs2019运行库 用不了vs2015的
所以需要更新 c++运行库.经过实际测试,vs2019开发的带c++ dll的, 放在只安装了vs2015 Microsoft Visual C++ Redistributable packages pc上会提示dll缺失,或依赖找不到.安装了最新的2015-2022 问题解决.
所以一般来说,安装完运行库,再运行应用一般不会有问题.
但也有不规范操作的例外.比如有些挺意外的情况,没在意debug 和release 下编译的 dll文件名 不同问题,碰到编译之后 比如lib1.dll ,debug下是libd1.dll . 同时 dll 引用内的dll 有个别也是d在文件名中.
如果此时吧debug 跟往常一样跟release一样用,那是会报错的,在不知以上原因的情况下,会让你怀疑人生.
于是把debug下的程序 ,放在客户机上无开发环境的 小白机上,是肯定会提示缺少依赖的
至于开发机上为何可以,跟开发环境 有关,比如上边的这是个 c++dll调用返回消息的, 开发机的system 内有 此文件,客户机内是没有带文件名末尾d 的dll.