windows下编程可执行程序加载.dll动态库失败

项目场景

windows下编程一个工程调用另一个工程的动态库 .dll 文件,可执行程序在另一台pc上执行出现问题

问题描述

windows下编程一个工程调用另一个工程的动态库文件,可执行程序在本机能够执行,将动态库和可执行程序拷贝到其他pc上,可执行程序报错。

如:我出现的情况可执行程序加载动态库文件失败,做过的项目WebSocketSrvHT.exe在另一台pc上加载HTCtrlSecMiddleware60006.dll文件失败。

原因分析

1.可执行程序加载动态库路径是否正确。
我的项目是搜索算法加载动态库,不存在路径错误。
2.动态了依赖的库是否完整。
用dependency walker软件查看依赖了哪些库,库是否完整。
dependency walker软件下载地址:http://www.dependencywalker.com/

如:用dependency walker软件查看HTCtrlSecMiddleware60006.dll文件依赖了哪些库在这里插入图片描述
其中少了MSVCR100D.DLL库,所以加载失败,拷贝MSVCR100D.DLL到C:\Windows\SysWOW64\ 下后,再执行可执行程序,能正常交互。

当时我的环境是win10,另一位同事环境是win11,我在我电脑上编译好动态库和可执行程序后,拷贝到另一同事的pc上,但同事执行可执行程序报错,在他电脑上安装dependency walker软件后,查看动态库HTCtrlSecMiddleware60006.dll依赖的库,发现少了一个windows的系统库,将少的那个系统库拷贝到相应的目录后,可执行程序正确启动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenSSL动态库的编译方式有两种,一种是在Linux环境下,另一种是在Windows环境下。 在Linux环境下,可以按照以下步骤进行编译: 1. 静态库编译: a. 在OpenSSL的根目录中,找到文件openssl-0.9.8d/crypto/bio/bss_file.c,并将以下代码注释掉: ``` #ifndef _FILE_OFFSET_BITS #define _FILE_OFFSET_BITS 64 #endif #endif ``` b. 如果报错提示缺少timeb.h文件,可以在报错的.c文件中删除`#undef TIMEB`。 c. 修改openssl顶层Makefile,删除“build_all:”后面的build_app和build_test,并删除”DIRS=”后面的app和tests。 d. 执行make命令进行编译,然后执行make install命令进行安装。 2. 动态库编译: a. 修改OpenSSL的配置文件,执行命令`./Configure no-asm --prefix=../OpenSSL`。 b. 修改Makefile文件的配置: - 将CC=gcc改成CC=armeb-linux-gcc; - 删除CFLAG=中的“-march=pentium”; - 将AR=ar $(ARFLAGS) r改为AR=armeb-linux-ar $(ARFLAGS) r; - 将ARD=ar $(ARFLAGS) d改为ARD=armeb-linux-ar $(ARFLAGS) d; - 将RANLIB=/usr/bin/ranlib改为RANLIB=armeb-linux-ranlib。 c. 执行make和make install命令进行编译安装。 在Windows环境下,可以按照以下步骤进行编译: 1. 安装ActivePerl,并使用Visual Studio的命令提示符进入控制台模式。 2. 解压缩OpenSSL的包,并通过cd命令切换到OpenSSL的目录。 3. 执行命令`perl configure VC-WIN32`进行配置。 4. 执行命令`ms/do_ms`选择不同的编译结果: - 执行`nmake -f ms/ntdll.mak`生成动态库,默认使用MD(动态链接运行时库)。 - 执行`nmake -f ms/nt.mak`生成静态库,默认使用MT(多线程运行时库)。 - 若要生成使用静态链接运行时库的动态库,可以复制一个ntdll.mak并命名为ntdll_mt.mak,修改里面的"CFLAG=/MD /Ox .............."为/MT,然后重新编译,执行`nmake -f ms/ntdll_mt.mak`。 - 若要生成使用动态链接运行时库的静态库,可以复制一个nt.mak并命名为nt_md.mak,修改里面的"CFLAG=/MT /Ox .............."为/MD,然后重新编译,执行`nmake -f ms/nt_md.mak`。 5. 其他命令: - 清除编译的中间文件:`nmake -f ms/ntdll.mak clean` - 安装:`nmake -f ms/ntdll.mak install`

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值