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. Link external library with MSCV compiler
QtWS25 Last Chance

Link external library with MSCV compiler

Scheduled Pinned Locked Moved Solved General and Desktop
qtcreator 5.11librarylinker errorsmsvcmingw
34 Posts 4 Posters 14.3k 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.
  • E elsa
    23 Aug 2018, 08:01

    @JonB said in Link external library with MSCV compiler:

    @elsa
    I'm not sure about the MSVC command-line. I was thinking it would use LINK and have something like /LIB and/or mention of blas_win32_MT.LIB, I'm niggled by the suspicion it's still trying to link with MinGW libraries, but I'm not sure. You could look at/show the actual linker line that's being executed?

    I thought this is just the line from the .pro file that I linked in the question. Is linking also defined somewhere else?

    P.S.
    blas_win32_MT, lapack_win32_MT: Apart from the fact that you need to check you're compiling & linking your code with /MT, those must be 32-bit libraries. You are compiling your code for 32-bit too, right?

    Okay maybe this is the problem!
    BIG UPDATE: The above mentioned errors get produced using the 64bit compiler, which -now that you say it- maybe explains why it doesn't work..
    The weird thing is, however, when running the 32 bit compiler I get the following error:

    error: LNK1112: module machine type 'x86' conflicts with target machine type 'x64'
    

    so I am confused now. Is 32bit or 64bit correct?

    J Online
    J Online
    JonB
    wrote on 23 Aug 2018, 08:06 last edited by JonB
    #17

    @elsa

    I thought this is just the line from the .pro file that I linked in the question. Is linking also defined somewhere else?

    All you have shown is a LIBS += ... line in a .pro file. When you compile (link) it must also show the actual command-line it has constructed and is executing using these, presumably in whatever "compiler output window" it has.

    error: LNK1112: module machine type 'x86' conflicts with target machine type 'x64'

    so I am confused now. Is 32bit or 64bit correct?

    x86 means 32-bit, x64 means 64-bit. Assuming from the names that those libraries you have are compiled 32-bit, you must compile everything else 32-bit (or get/compile 64-bit version of the libraries). The fact that you have a message target machine type 'x64' must indicate that somewhere you have told Qt Creator (the .pro file?) that your target is 64-bit, and that does not look good....

    E 1 Reply Last reply 23 Aug 2018, 08:20
    0
    • J JonB
      23 Aug 2018, 08:06

      @elsa

      I thought this is just the line from the .pro file that I linked in the question. Is linking also defined somewhere else?

      All you have shown is a LIBS += ... line in a .pro file. When you compile (link) it must also show the actual command-line it has constructed and is executing using these, presumably in whatever "compiler output window" it has.

      error: LNK1112: module machine type 'x86' conflicts with target machine type 'x64'

      so I am confused now. Is 32bit or 64bit correct?

      x86 means 32-bit, x64 means 64-bit. Assuming from the names that those libraries you have are compiled 32-bit, you must compile everything else 32-bit (or get/compile 64-bit version of the libraries). The fact that you have a message target machine type 'x64' must indicate that somewhere you have told Qt Creator (the .pro file?) that your target is 64-bit, and that does not look good....

      E Offline
      E Offline
      elsa
      wrote on 23 Aug 2018, 08:20 last edited by elsa
      #18

      @JonB

      All you have shown is a LIBS += ... line in a .pro file. When you compile (link) it must also show the actual command-line it has constructed and is executing using these, presumably in whatever "compiler output window" it has.

      link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\DecaRangeRTLS.exe @C:\Users\FRHMELSA\AppData\Local\Temp\DecaRangeRTLS.exe.10468.50531.jom
      

      x86 means 32-bit, x64 means 64-bit. Assuming from the names that those libraries you have are compiled 32-bit, you must compile everything else 32-bit (or get/compile 64-bit version of the libraries). The fact that you have a message target machine type 'x64' must indicate that somewhere you have told Qt Creator (the .pro file?) that your target is 64-bit, and that does not look good....

      yes I have reached that assumption as well, but then how do I change the target machine type? :/

      J J 2 Replies Last reply 23 Aug 2018, 08:34
      0
      • E elsa
        23 Aug 2018, 08:20

        @JonB

        All you have shown is a LIBS += ... line in a .pro file. When you compile (link) it must also show the actual command-line it has constructed and is executing using these, presumably in whatever "compiler output window" it has.

        link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\DecaRangeRTLS.exe @C:\Users\FRHMELSA\AppData\Local\Temp\DecaRangeRTLS.exe.10468.50531.jom
        

        x86 means 32-bit, x64 means 64-bit. Assuming from the names that those libraries you have are compiled 32-bit, you must compile everything else 32-bit (or get/compile 64-bit version of the libraries). The fact that you have a message target machine type 'x64' must indicate that somewhere you have told Qt Creator (the .pro file?) that your target is 64-bit, and that does not look good....

        yes I have reached that assumption as well, but then how do I change the target machine type? :/

        J Online
        J Online
        JonB
        wrote on 23 Aug 2018, 08:34 last edited by
        #19

        @elsa
        I don't know in Qt Creator, but it can hardly be difficult, presumably you specify it at some point when you set up your project. Google for it.

        Unless the error is from one of your libraries already being compiled 64-bit. Check whether those libraries with win32 in them are indeed 32-bit, not 64-bit.

        Come on, you can do this, I can't answer!

        1 Reply Last reply
        1
        • E elsa
          23 Aug 2018, 08:20

          @JonB

          All you have shown is a LIBS += ... line in a .pro file. When you compile (link) it must also show the actual command-line it has constructed and is executing using these, presumably in whatever "compiler output window" it has.

          link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\DecaRangeRTLS.exe @C:\Users\FRHMELSA\AppData\Local\Temp\DecaRangeRTLS.exe.10468.50531.jom
          

          x86 means 32-bit, x64 means 64-bit. Assuming from the names that those libraries you have are compiled 32-bit, you must compile everything else 32-bit (or get/compile 64-bit version of the libraries). The fact that you have a message target machine type 'x64' must indicate that somewhere you have told Qt Creator (the .pro file?) that your target is 64-bit, and that does not look good....

          yes I have reached that assumption as well, but then how do I change the target machine type? :/

          J Offline
          J Offline
          jsulm
          Lifetime Qt Champion
          wrote on 23 Aug 2018, 08:39 last edited by
          #20

          @elsa said in Link external library with MSCV compiler:

          but then how do I change the target machine type?

          Use Qt for that target machine type

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

          1 Reply Last reply
          0
          • E Offline
            E Offline
            elsa
            wrote on 23 Aug 2018, 11:47 last edited by
            #21

            @JonB @jsulm @mrjj I will try to start doing all the steps from scratch, because I am getting frustrated and cannot get on with the project because of this linker problem..
            I am running Qt5.11.1. So what I read is that it only supports up to VS15, so I installed VS15. Qt, however, did not auto-detect the VS 14.0 compiler, so I had to add it manually. I found the path of the compiler .dll file but Qt also wants a make path (where is it?). This is where I am stuck now. Which make executable do I need for the compiler? and what else am I missing? I am sorry if my questions are to confusing or too easy. I am just trying to understand, because I never dealt with compilers and linkers in detail before and this problem came very unexpected.

            J 1 Reply Last reply 23 Aug 2018, 11:53
            0
            • E elsa
              23 Aug 2018, 11:47

              @JonB @jsulm @mrjj I will try to start doing all the steps from scratch, because I am getting frustrated and cannot get on with the project because of this linker problem..
              I am running Qt5.11.1. So what I read is that it only supports up to VS15, so I installed VS15. Qt, however, did not auto-detect the VS 14.0 compiler, so I had to add it manually. I found the path of the compiler .dll file but Qt also wants a make path (where is it?). This is where I am stuck now. Which make executable do I need for the compiler? and what else am I missing? I am sorry if my questions are to confusing or too easy. I am just trying to understand, because I never dealt with compilers and linkers in detail before and this problem came very unexpected.

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 23 Aug 2018, 11:53 last edited by jsulm
              #22

              @elsa said in Link external library with MSCV compiler:

              So what I read is that it only supports up to VS15

              This is wrong - it supports VS17. But since VS15 and VS17 C++ compiler are compatible this does not matter. If you use Qt online installer you will see what compiler Qt 5.11.1 supports.

              "but Qt also wants a make path" - can you please tell us exactly what it asks (screen-shot)?

              If my understanding is correct the lib you want to use is built for x86, right? Official Qt build for Windows/VS are all x86_64. You will need a x86_64 build of that lib or build it by yourself.

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

              E 1 Reply Last reply 23 Aug 2018, 12:18
              1
              • J jsulm
                23 Aug 2018, 11:53

                @elsa said in Link external library with MSCV compiler:

                So what I read is that it only supports up to VS15

                This is wrong - it supports VS17. But since VS15 and VS17 C++ compiler are compatible this does not matter. If you use Qt online installer you will see what compiler Qt 5.11.1 supports.

                "but Qt also wants a make path" - can you please tell us exactly what it asks (screen-shot)?

                If my understanding is correct the lib you want to use is built for x86, right? Official Qt build for Windows/VS are all x86_64. You will need a x86_64 build of that lib or build it by yourself.

                E Offline
                E Offline
                elsa
                wrote on 23 Aug 2018, 12:18 last edited by
                #23

                @jsulm 0_1535026544645_kitqt.PNG

                This is a screenshot of the kit I am using now. This warning made me think that qt only supports VS15, but if it doesn't make a difference, then it's ok. This is now using the autodetected compiler (VS17), so I don't need to set up the path manually.
                And yes the library is x86.

                J 1 Reply Last reply 23 Aug 2018, 12:20
                0
                • E elsa
                  23 Aug 2018, 12:18

                  @jsulm 0_1535026544645_kitqt.PNG

                  This is a screenshot of the kit I am using now. This warning made me think that qt only supports VS15, but if it doesn't make a difference, then it's ok. This is now using the autodetected compiler (VS17), so I don't need to set up the path manually.
                  And yes the library is x86.

                  J Offline
                  J Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on 23 Aug 2018, 12:20 last edited by
                  #24

                  @elsa OK, you have 32bit Qt, compiler and lib - does it work now?

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

                  E 1 Reply Last reply 23 Aug 2018, 12:23
                  0
                  • J jsulm
                    23 Aug 2018, 12:20

                    @elsa OK, you have 32bit Qt, compiler and lib - does it work now?

                    E Offline
                    E Offline
                    elsa
                    wrote on 23 Aug 2018, 12:23 last edited by
                    #25

                    @jsulm it produces this error:

                    f:\dd\vctools\crt\vcstartup\src\gs\gs_report.c:220: error: Debugger encountered an exception: Exception at 0xca9b99, code: 0xc0000409: , flags=0x1 (execution cannot be continued)
                    f:\dd\vctools\crt\vcstartup\src\gs\gs_report.c:220: error: Debugger encountered an exception: Exception at 0xca9b99, code: 0xc0000409: , flags=0x1 (execution cannot be continued)
                    
                    J 1 Reply Last reply 23 Aug 2018, 12:27
                    0
                    • E elsa
                      23 Aug 2018, 12:23

                      @jsulm it produces this error:

                      f:\dd\vctools\crt\vcstartup\src\gs\gs_report.c:220: error: Debugger encountered an exception: Exception at 0xca9b99, code: 0xc0000409: , flags=0x1 (execution cannot be continued)
                      f:\dd\vctools\crt\vcstartup\src\gs\gs_report.c:220: error: Debugger encountered an exception: Exception at 0xca9b99, code: 0xc0000409: , flags=0x1 (execution cannot be continued)
                      
                      J Offline
                      J Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on 23 Aug 2018, 12:27 last edited by
                      #26

                      @elsa But this is when you try to run/debug the app, right?
                      Building it works?
                      To debug this error you should build in debug mode.

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

                      E 2 Replies Last reply 23 Aug 2018, 12:30
                      1
                      • J jsulm
                        23 Aug 2018, 12:27

                        @elsa But this is when you try to run/debug the app, right?
                        Building it works?
                        To debug this error you should build in debug mode.

                        E Offline
                        E Offline
                        elsa
                        wrote on 23 Aug 2018, 12:30 last edited by elsa
                        #27

                        @jsulm oh true!! Sorry, I mixed it up. Yes, with the debugger it crashes at the end of one the functions.. I look into it more closely..

                        1 Reply Last reply
                        0
                        • J jsulm
                          23 Aug 2018, 12:27

                          @elsa But this is when you try to run/debug the app, right?
                          Building it works?
                          To debug this error you should build in debug mode.

                          E Offline
                          E Offline
                          elsa
                          wrote on 23 Aug 2018, 13:10 last edited by
                          #28

                          @jsulm
                          I commented some lines out to find the source of the problem and now it's producing the linking error again -.- This is the compile output:

                          	C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
                          	link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\DecaRangeRTLS.exe @C:\Users\FRHMELSA\AppData\Local\Temp\DecaRangeRTLS.exe.5688.156.jom
                          Qt53DExtrasd.lib(Qt53DExtrasd.dll) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'
                          jom: C:\Users\FRHMELSA\Documents\Projects\build-TREKdisplay-Desktop_Qt_5_11_1_MSVC2017_32bit-Debug\Makefile.Debug [debug\DecaRangeRTLS.exe] Error 1112
                          jom: C:\Users\FRHMELSA\Documents\Projects\build-TREKdisplay-Desktop_Qt_5_11_1_MSVC2017_32bit-Debug\Makefile [debug] Error 2
                          15:06:47: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited with code 2.
                          Error while building/deploying project TREKdisplay (kit: Desktop Qt 5.11.1 MSVC2017 32bit)
                          The kit Desktop Qt 5.11.1 MSVC2017 32bit has configuration issues which might be the root cause for this problem.
                          When executing step "Make"
                          

                          So the problem is with Qt3DExtras? Is this library 64bit? But this doesn't make sense right? Because whole Qt is 32bit and this is just part of it.

                          J J 2 Replies Last reply 24 Aug 2018, 04:21
                          0
                          • E elsa
                            23 Aug 2018, 13:10

                            @jsulm
                            I commented some lines out to find the source of the problem and now it's producing the linking error again -.- This is the compile output:

                            	C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
                            	link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\DecaRangeRTLS.exe @C:\Users\FRHMELSA\AppData\Local\Temp\DecaRangeRTLS.exe.5688.156.jom
                            Qt53DExtrasd.lib(Qt53DExtrasd.dll) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'
                            jom: C:\Users\FRHMELSA\Documents\Projects\build-TREKdisplay-Desktop_Qt_5_11_1_MSVC2017_32bit-Debug\Makefile.Debug [debug\DecaRangeRTLS.exe] Error 1112
                            jom: C:\Users\FRHMELSA\Documents\Projects\build-TREKdisplay-Desktop_Qt_5_11_1_MSVC2017_32bit-Debug\Makefile [debug] Error 2
                            15:06:47: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited with code 2.
                            Error while building/deploying project TREKdisplay (kit: Desktop Qt 5.11.1 MSVC2017 32bit)
                            The kit Desktop Qt 5.11.1 MSVC2017 32bit has configuration issues which might be the root cause for this problem.
                            When executing step "Make"
                            

                            So the problem is with Qt3DExtras? Is this library 64bit? But this doesn't make sense right? Because whole Qt is 32bit and this is just part of it.

                            J Offline
                            J Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on 24 Aug 2018, 04:21 last edited by
                            #29

                            @elsa Delete build folder, run qmake and build again.

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

                            E 1 Reply Last reply 24 Aug 2018, 07:01
                            2
                            • J jsulm
                              24 Aug 2018, 04:21

                              @elsa Delete build folder, run qmake and build again.

                              E Offline
                              E Offline
                              elsa
                              wrote on 24 Aug 2018, 07:01 last edited by
                              #30
                              This post is deleted!
                              1 Reply Last reply
                              0
                              • E elsa
                                23 Aug 2018, 13:10

                                @jsulm
                                I commented some lines out to find the source of the problem and now it's producing the linking error again -.- This is the compile output:

                                	C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
                                	link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\DecaRangeRTLS.exe @C:\Users\FRHMELSA\AppData\Local\Temp\DecaRangeRTLS.exe.5688.156.jom
                                Qt53DExtrasd.lib(Qt53DExtrasd.dll) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'
                                jom: C:\Users\FRHMELSA\Documents\Projects\build-TREKdisplay-Desktop_Qt_5_11_1_MSVC2017_32bit-Debug\Makefile.Debug [debug\DecaRangeRTLS.exe] Error 1112
                                jom: C:\Users\FRHMELSA\Documents\Projects\build-TREKdisplay-Desktop_Qt_5_11_1_MSVC2017_32bit-Debug\Makefile [debug] Error 2
                                15:06:47: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited with code 2.
                                Error while building/deploying project TREKdisplay (kit: Desktop Qt 5.11.1 MSVC2017 32bit)
                                The kit Desktop Qt 5.11.1 MSVC2017 32bit has configuration issues which might be the root cause for this problem.
                                When executing step "Make"
                                

                                So the problem is with Qt3DExtras? Is this library 64bit? But this doesn't make sense right? Because whole Qt is 32bit and this is just part of it.

                                J Online
                                J Online
                                JonB
                                wrote on 24 Aug 2018, 07:21 last edited by JonB
                                #31

                                @elsa

                                Qt53DExtrasd.lib(Qt53DExtrasd.dll) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'
                                So the problem is with Qt3DExtras? Is this library 64bit?

                                I read this the other way round. I have searched this error and MS docs state it's a "version mismatch" but nowhere clarify which is which in the error message... :(

                                I believe this is saying: Qt53DExtrasd is a module which is compiled x86 (32-bit), but your overall LINK is targetting x64 (64-bit).

                                If that's the case, somehow your makefile/compilation/link is still targetting 64-bit when you want it to target 32-bit.... Make 100% sure that whatever the qmake generates (a makefile?) has no references to 64-bit but only to 32-bit, and that everything (of yours) is rebuilt from scratch.

                                1 Reply Last reply
                                0
                                • E Offline
                                  E Offline
                                  elsa
                                  wrote on 24 Aug 2018, 09:16 last edited by
                                  #32

                                  @jsulm @JonB thank you both a lot for your patience! The deleting of the build folder suggested by @jsulm did it. Now it builds fine, but I still cannot run it :( (see new thread). I will mark this question as solved as the linking is now successful.

                                  J 1 Reply Last reply 24 Aug 2018, 11:23
                                  0
                                  • E elsa
                                    24 Aug 2018, 09:16

                                    @jsulm @JonB thank you both a lot for your patience! The deleting of the build folder suggested by @jsulm did it. Now it builds fine, but I still cannot run it :( (see new thread). I will mark this question as solved as the linking is now successful.

                                    J Online
                                    J Online
                                    JonB
                                    wrote on 24 Aug 2018, 11:23 last edited by
                                    #33

                                    @elsa Good. That's why we said you have to clean out completely if you change fundamental compilation, something will have been left over without doing that.

                                    E 1 Reply Last reply 24 Aug 2018, 11:27
                                    1
                                    • J JonB
                                      24 Aug 2018, 11:23

                                      @elsa Good. That's why we said you have to clean out completely if you change fundamental compilation, something will have been left over without doing that.

                                      E Offline
                                      E Offline
                                      elsa
                                      wrote on 24 Aug 2018, 11:27 last edited by
                                      #34

                                      @JonB well, I thought it just creates a new build file for the new compiler (which it does), but I have to admit my understanding for compilers is not very deep.

                                      1 Reply Last reply
                                      0

                                      26/34

                                      23 Aug 2018, 12:27

                                      • Login

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