在运行时加载第 3 方 DLL 失败并出现未处理异常(Log4CXX、ActiveMQ)

Posted

技术标签:

【中文标题】在运行时加载第 3 方 DLL 失败并出现未处理异常(Log4CXX、ActiveMQ)【英文标题】:Loading 3rd party DLL fails with Unhandled Exception at runtime (Log4CXX, ActiveMQ) 【发布时间】:2016-04-10 08:44:38 【问题描述】:

我正在尝试在 32 位 C++ 控制台应用程序中使用 VS 2008 在 Windows 上运行开箱即用的 ActiveMQ 示例 http://activemq.apache.org/cms/example.html

项目已构建,但运行程序时出现异常。

XXXXXX.exe 中 0x768b3e28 处的未处理异常:Microsoft C++ 异常:内存位置 0x0100f880 处的 std::length_error..

当我尝试运行一个单独的项目和另一个 3rd 方 DLL (log4CXX) 时,我得到了完全相同的内存地址相同的异常。

路径设置

DLL 文件位于 Windows/System32 以及 Windows/SysWOW64 中。

我已将头文件路径添加到配置属性 > C/C++ > 附加包含目录。 在链接器 > 输入 > 附加依赖项中,我有 ws2_32.lib libapr-1.lib activemq-cpp.lib。 在链接器 > 常规 > 附加库目录中,我指定了存在 lib 文件的文件夹的路径。 包含 lib 和头文件的路径,我相信这就是构建项目没有问题的原因。

【问题讨论】:

确实在程序可以找到的地方同时需要 .lib 文件和 .dll 文件。在 Linux 上,.so 是这些文件的组合,但在 Windows 上,它们是单独的文件。 那么运行程序必须要有DLL吗? VC 不会与我所指的项目一起构建它吗? 谢谢@BoPersson,这是一个非常愚蠢的问题。我找到了 dll,应用程序现在应该可以工作了。 【参考方案1】:

错误只是因为程序没有找到 dll。对于 64 位机器上的 32 位 dll,我只需将 dll 放在系统库文件夹 (C:/Windows/SysWoW64) 上。

【讨论】:

以上是关于在运行时加载第 3 方 DLL 失败并出现未处理异常(Log4CXX、ActiveMQ)的主要内容,如果未能解决你的问题,请参考以下文章

打开电脑文件时,老出现"加载 失败,找不到指定的模块"是怎么回事?

pyodbc - ImportError:DLL 加载失败:

加载dll失败

ffpyplayer ImportError:导入播放器时DLL加载失败

从 ant 执行的 junit 测试未加载 DLL

Visual C++:插件 DLL 使用的第 3 方 DLL 的位置?