【问题标题】:Websphere MQ C++ client crashes in VS2013- library/linker issues?Websphere MQ C++ 客户端在 VS2013-库/链接器问题中崩溃?
【发布时间】:2013-11-19 03:49:47
【问题描述】:

我刚刚将一个项目从 VS2010 升级到 VS2013,现在每当我通过 MQ 发送消息时它都会崩溃,但它在 VS2010 下运行良好。

我怀疑它与 VS2013 有关,所以我构建了一个 MQ 附带的演示应用程序 - imqwrld.cpp,它是一个简单的“hello world”应用程序。

仅此代码就足以让调试运行时库抛出异常:

 #include <imqi.hpp> // WebSphere MQ C++
 int main ( int argc, char * * argv ) {

    ImqQueue * p = new ImqQueue();
    delete p;
    return 0
 }

当 ImqObject 被删除时,crtl 会检测到内存损坏。

我怀疑这是因为 DLL 地狱。 MQ dll 依赖于 msvcr80.dll,我的程序使用了不同版本的库 - msvcr120d.dll。

关于如何解决这个问题的任何建议?我正在使用 MQ 客户端 7

【问题讨论】:

    标签: winapi dll ibm-mq visual-studio-2013


    【解决方案1】:

    它是一个当前版本(直到并包括 7.5)错误/限制 - MQ 从中生成其 C++ 库的编译器,并且 Visual Studio 2012+ 编译器显然是二进制不兼容的。除了使用 C 或 .NET API 之外,您无法解决或解决此问题,具体取决于您要执行的操作...

    正如@John M Gant 在下面评论的那样,here 是 IBM 的官方支持页面。顺便说一句,它看起来像 MQ Series 8.0 is supported for C++ in VS2012

    【讨论】:

    • 是的,我也试过 7.5。你从哪里听到的?你确定 API 的 c 版本可以工作吗?
    • 从对msvcr80.dll的依赖来看,MQ好像是用VS2005构建的。我怀疑这与 VS2013 的 RTL 和 VS2005 RTL 之间混合的内存分配有关 - 当它崩溃时,调用堆栈完全是 fubar!我已经设法让我的代码工作......在对我创建 MQ 对象的方式进行了一些调整之后,但从你所说的来看,也许它只是等待发生的崩溃......我可能可以移植我的代码以使用虽然 C api 很容易......
    • 我知道这个问题是因为我帮助调试了它 :-) 您说得对,该产品目前是在 2005 年构建的。我 100% 确定 C api 可以正常工作,并且非常确定 C++ 问题无法解决。从长远来看,FWIW 调用 C api 对您来说要好得多,因为 C++ api 已经稳定。
    • 您能否详细说明您认为 C API 有效的原因?您是否收到过 IBM 的官方回应?我也认为是这样,然后在对我的代码进行了一些无关紧要的更改后,它就停止了工作。这与我使用 C++ API 得到的行为完全相同(在调整了我实例化 MQ 对象的方式之后,我实际上已经在工作了)。我并不是要听起来粗鲁,我只是不想再浪费时间试图让它与 VS2013 一起使用......
    • 不能说 VS 2013,但 2012 肯定可以(就目前为止的测试发现而言)。据我所知,C api 可以工作,并且不存在相同的问题,因为 C 有一个定义的(按标准)内存布局。你有一个示例应用程序,它展示了你看到的问题,你可以把它放在某个地方让我测试,我不介意看看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2016-10-31
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    相关资源
    最近更新 更多