Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. why does my program find dll's it is not suposed to find?

why does my program find dll's it is not suposed to find?

Scheduled Pinned Locked Moved Solved General and Desktop
6 Posts 4 Posters 1.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    Koen de Gruijter
    wrote on last edited by
    #1

    Hi

    Normaly people ask why it cant find dll's, but i also want to understand why it find dll's.

    When i run my program in dependency walker it points to dll's that are not deliverd (but should) with my program. And finds these dll in the qt instalation directory ( example: "c:\qt\5.7\msvc2015_64\plugins\imageformats\QGIF.DLL" ).
    If i rename the qt directory it wont run properly, so it surly used the dll's in that folder.

    my program is installed in 'C:\Program Files\myProgram" and and started from Dependency walker.
    if i type "path" or "set" in the command promp there is nothing pointing to the qt instalation dir.

    what is pointing to "c:\qt\5.7\msvc2015_64" ?

    jsulmJ 1 Reply Last reply
    0
    • marievinM Offline
      marievinM Offline
      marievin
      wrote on last edited by
      #2

      Hi

      I think that you don't see the entire content of your environment variables using the path or set commands in a command prompt.
      Please look at your environment variables in the Windows GUI : (On Windows 10) type Windows Key + Pause -> Advanced System Parameters -> Environment Variables

      On Windows, the documentation explains how the DLL are searched.

      Hope this will help
      Regards
      Vincent

      K 1 Reply Last reply
      1
      • K Koen de Gruijter

        Hi

        Normaly people ask why it cant find dll's, but i also want to understand why it find dll's.

        When i run my program in dependency walker it points to dll's that are not deliverd (but should) with my program. And finds these dll in the qt instalation directory ( example: "c:\qt\5.7\msvc2015_64\plugins\imageformats\QGIF.DLL" ).
        If i rename the qt directory it wont run properly, so it surly used the dll's in that folder.

        my program is installed in 'C:\Program Files\myProgram" and and started from Dependency walker.
        if i type "path" or "set" in the command promp there is nothing pointing to the qt instalation dir.

        what is pointing to "c:\qt\5.7\msvc2015_64" ?

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #3

        @Koen-de-Gruijter Because Qt consists of modules and plug-ins. Some modules have dependencies to other modules or plug-ins.
        From your example: plugins\imageformats\QGIF.DLL is needed by QtGui to be able to handle GIF images. Even if you do not use GIF images in your application QtGui still have that dependency (but can be used without QGIF.DLL as long as you do not try to use GIF images).

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        3
        • marievinM marievin

          Hi

          I think that you don't see the entire content of your environment variables using the path or set commands in a command prompt.
          Please look at your environment variables in the Windows GUI : (On Windows 10) type Windows Key + Pause -> Advanced System Parameters -> Environment Variables

          On Windows, the documentation explains how the DLL are searched.

          Hope this will help
          Regards
          Vincent

          K Offline
          K Offline
          Koen de Gruijter
          wrote on last edited by
          #4

          @marievin i knew about my Environment variables, but there was nothing pointing to my qt directory (did not came up with the path or set command) thats why i was wondering what was pointing to my qt install dir.

          your link however came up with something my eyes fall on.

          If a DLL with the same module name is already loaded in memory, the system checks only for redirection and a manifest before resolving to the loaded DLL, no matter which directory it is in. The system does not search for the DLL.
          

          So if i understand it correctly because i ran my application from visual studio (with the QtDir set in the environment of project settings ) before i ran my installed application(located in program filed) it could be possible the dll's where still loaded in the memory?

          However the strange thing is if i reboot my computer and the first thing i startup is my installed aplication, it still loads dll's it is not supposed to find. (the dll's should not be in my memory because i rebooted)
          There must be something else pointing to my qt installation dir....

          @jsulm i knew qt's modules needs to load other modules but my problem was is that it found those modules in directories where it should not seek for modules.

          i know it should not work, but it works and i have no idea why.

          1 Reply Last reply
          0
          • Chris KawaC Online
            Chris KawaC Online
            Chris Kawa
            Lifetime Qt Champion
            wrote on last edited by Chris Kawa
            #5

            i know it should not work, but it works and i have no idea why

            It should work and it does. No need for conspiracy theories ;)

            Some of Qt dlls have embedded a path to the location they were built in. For an example open Qt5Core.dll in a text editor (yes, you read that right, a dll in a text editor) and look for qt_prfxpath. You will see it's a variable set to the location where Qt was built in. It is also patched in as part of the installation process if you use Qt maintenance tool, to point to the installation directory.

            The prefix location is one of the locations used to look for plugins so no matter where your app is placed it will look in the directory that embedded path points to. That's why it stops loading these plugins if you rename Qt's installation directory.

            Part of a proper deployment is patching these dlls not to include any developer machine specific paths. That's one of the things windeployqt tool does and that's why you should prefer it instead of manual copying of the libraries. It patches this path to be ., which makes the deployed app look for plugins only in its own directory.

            K 1 Reply Last reply
            4
            • Chris KawaC Chris Kawa

              i know it should not work, but it works and i have no idea why

              It should work and it does. No need for conspiracy theories ;)

              Some of Qt dlls have embedded a path to the location they were built in. For an example open Qt5Core.dll in a text editor (yes, you read that right, a dll in a text editor) and look for qt_prfxpath. You will see it's a variable set to the location where Qt was built in. It is also patched in as part of the installation process if you use Qt maintenance tool, to point to the installation directory.

              The prefix location is one of the locations used to look for plugins so no matter where your app is placed it will look in the directory that embedded path points to. That's why it stops loading these plugins if you rename Qt's installation directory.

              Part of a proper deployment is patching these dlls not to include any developer machine specific paths. That's one of the things windeployqt tool does and that's why you should prefer it instead of manual copying of the libraries. It patches this path to be ., which makes the deployed app look for plugins only in its own directory.

              K Offline
              K Offline
              Koen de Gruijter
              wrote on last edited by
              #6

              @Chris-Kawa Your answer takes the magic away, its all clear to me now. I did not even knew about the existence of the windeployqt tool.

              thanks.

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved