有些库是在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.

 

posted on 2021-12-09 08:47  小石头的一天  阅读(174)  评论(0编辑  收藏  举报