mq
  1. mq
  2. MQ-127

C API (MQCRT1.DLL) dependant on non-existent MSVCR90.DLL

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 4.5
    • Fix Version/s: 4.5.2
    • Component/s: build
    • Labels:
      None
    • Environment:

      Windows 7 and Windows Server 2003/2008.

      Description

      I developed and support an internal C application developed in MSVC++ (native code) that accesses an OMQ broker in a factory shop floor environment. It has worked fine with OMQ 4.3 and 4.4u1 for well over a year. A developer recently installed 4.5.1 on his workstation and attempted to run the application, and received the Windows error dialog saying that MSVCR90.DLL could not be found. Both 4.3 and 4.4u1 are built against the same DLL and find it just fine, as does another 3rd party library that the application also uses. Nothing else about the system or application has changed: system PATH correctly points to the proper 4.5.1 mq\lib and nss\lib folders, the latest vcredist_x86.exe has been installed and reinstalled multiple times, etc. We have tried on 3 different Windows 7 developer workstations and a Windows 2003 server, all of which work fine with OMQ 4.3/4.4u1. When I change the PATH to point from 4.5.1 libs to 4.4u1 libs, the app works again.

      Further, when I point Dependency Walker to the 4.5.1 MQCRT1.DLL, it also complains that it cannot find MSVCR90.DLL. However when I open up MQCRT1.DLL from 4.4 and 4.3, it resolves the same DLL just fine. This comparison should be easily reproducible in your own tests.

      Since MSVCR90.DLL is the C runtime from VS 2008, and we've installed the latest SP1 copy of vcredist_x86.exe which is the official and recommended method for redistributing that particular runtime library, I have to assume that the 4.5.1 C API is broken. Perhaps it was been built incorrectly, or against some strange version of MSVCR90.DLL that isn't widely available, or with a corrupted manifest that is pointing to a non-existent version of MSVCR90.DLL. Thankfully VS 2010 eliminates the manifest requirements and allows you to just drop MSVC runtime DLLs in application folders like the old days, but unfortunately VS 2008 requires the manifest and SxS registry approach (taking us from DLL Hell to Manifest Hell). It would be nice if OMQ could be built against VS 2010, or better yet, statically linked with the VS 2010 C runtime so as to eliminate dependance on external runtime libs.

      As a temporary workaround, I've discovered that if I replace the 4.5.1 MQCRT1.DLL with the one from 4.4u1, it works and seems to successfully work against a running 4.5.1 broker. Not sure if this is recommended or supported though.

        Activity

        Hide
        Jill Sato added a comment -

        We found a potential problem in our makefiles around the b17/b18 timeframe.
        I'll rebuild a new MQ4.5.1 mqcrt dll for you and post it so you could verify
        since we aren't able to reproduce in-house. Thanks for all your info.

        Show
        Jill Sato added a comment - We found a potential problem in our makefiles around the b17/b18 timeframe. I'll rebuild a new MQ4.5.1 mqcrt dll for you and post it so you could verify since we aren't able to reproduce in-house. Thanks for all your info.
        Hide
        Jill Sato added a comment - - edited

        We rebuilt the MQ 4.5.1 cclient library for windows. Can you give this a try? Thanks.

        Updated location of fix:
        http://download.java.net/mq/open-mq/4.5.1/windows-capi-fix/mq451-testfix-01.zip

        Show
        Jill Sato added a comment - - edited We rebuilt the MQ 4.5.1 cclient library for windows. Can you give this a try? Thanks. Updated location of fix: http://download.java.net/mq/open-mq/4.5.1/windows-capi-fix/mq451-testfix-01.zip
        Hide
        dmorris68 added a comment -

        Success! Thanks Jill, that has cleared up the issue. Dropping your testfix MQCRT1.DLL into my 4.5.1 installation works – Dependency Walker was satisfied and my application works again with the 4.5.1 broker.

        Show
        dmorris68 added a comment - Success! Thanks Jill, that has cleared up the issue. Dropping your testfix MQCRT1.DLL into my 4.5.1 installation works – Dependency Walker was satisfied and my application works again with the 4.5.1 broker.
        Hide
        Jill Sato added a comment -

        Fix in 4.5.2.

        Show
        Jill Sato added a comment - Fix in 4.5.2.
        Hide
        Jill Sato added a comment -

        Submitter has verified the fix.
        Closing this issue.

        Show
        Jill Sato added a comment - Submitter has verified the fix. Closing this issue.

          People

          • Assignee:
            Jill Sato
            Reporter:
            dmorris68
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: