Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
(resolved) adding versions of the libraries (was: Creator: size_t/ssize_t not recognized)
Hi, all -
I installed 4.8.1 this morning (Windows) and now a once-working program is giving me lots of errors, evidently stemming from an inability to find the definition of size_t and ssize_t. I've reverted to 4.8.0, but the problem persists.
I do notice in my toolchains that I now have a bunch of MSVC detected before MinGW. I also notice that Creator is invoking one of the MSVC compilers. So, a related question would be, how do I tell Creator which element in the toolchain I want to use?
The problem is that on windows all compilers seem to try hard to be incompatible with all others:-( So you can not build your code with mingw and then link that against a Qt built with MSVC2010 (or whichever version).
My guess is that you selected a Qt version built with MSVC for your project. Creator will only offer tool chains that will produce object files that are actually ocmpatible with the Qt version you want to link against. In your case mingw does not seem to be on that list.
So select a Qt built with mingw and you won't be offered MSVC tool chains anymore.
PS: Why don't you just fix the issue and make your application built with both mingw and MSVC? That is definitely possible: Creator builds with MSVC, mingw, plain gcc, clang and inter compilers. All compilers will warn/error out about different things, so making sure your code builds with several of them makes sure you do not stray too far from the C++ standard:-)
Hi, Tobias -
So, first off...when you say a "Qt version" does this imply that I need to download a new version of Creator?
And, I'd love to build with both tool sets. But...how do I choose the tool chain I want to use?
No, you don't need to re-download Creator. Creator itself doesn't care which version of the Qt libraries, or which compilers, you have. To ensure that your programs build properly, you only need to make sure that your libraries are compatible with your compiler (see http://qt-project.org/downloads#qt-lib -- there are different "versions" of Qt 4.8.3, pre-built for different compilers).
To choose the tool chain in Creator, go to Tools -> Options -> Build & Run. Then, set your Qt Versions and Tool Chains.
Hi, JKSH -
OK, that clears it up (partly). I just downloaded and installed the libraries for MinGW and VS2010.
Now: how do I get Creator to auto-detect these? Currently it only "finds" my 4.8.0 directory.
I usually set it up manually myself, but IIRC, for auto-detection to work, the folders containing your compiler and qmake.exe (C:<qt-install-dir>\bin ) must be in your PATH environment variable.
You can also add them manually via Tools -> Options -> Build & Run -> Qt Versions/Tool Chains -> Add
Once Qt Creator knows where to find Qt and your compiler, you can set up different "build configurations" (i.e. choose your Qt version & compiler) on a per-project basis by...
- ... starting a new project (Creator will show you a "Configure Project" window), or
- ... clicking "Projects" on the left of Creator, while your project is open
Then, if you've set up multiple build configurations, you can switch between them by clicking on the computer icon on the bottom-left of Creator.
Hmm...I'm going to pursue the auto-detect route, just to prove that I can make it work. I added the two paths containing the 4.8.3 qmake.exe, but nothing new shows up in my "Qt Versions" window. Do I need to install more than just the libraries?
FWIW: I put the additions to PATH in my project settings, not into my system-wide properties. I even exited and relaunched Creator...no luck. What step am I leaving out?
By "project settings", do you mean .pro file? I'm not sure if that works. The .pro file is for qmake to use... i.e. qmake must already be found before you can give it your .pro file. Furthermore, qmake is compiler-agnostic: It simply creates a Makefile, which Qt Creator then passes to your tool chain.
Your options, that I can think of, are:
- Add the PATH to your system-wide (or at least user-level) settings, or
- Launch Qt Creator through a Batch file that sets a temporary environment before launching Creator
Some things to look out for: If I'm not mistaken, Windows 7 and older do not recognize new system-wide PATH variables until you reboot (maybe logout+relogin). If I'm not mistaken again, Windows 8 behaves more sensibly, and PATH additions are immediately usable.
Nope, we run the Qt version auto detection only once and that will pick up whatever is in your PATH at that time. You do not want your Qt versions to change (which will most likely effect all your project configurations!) depending on how you started creator (usually cmd-windows end up having different PATHes set than those used by windows when clicking on the application icon).
You will need to register the Qt versions manually. The only way for us to reliably detect all Qt versions installed at any time is to search all your harddrives at startup of creator. That takes way too long to be practical.
Somehow I missed notification of your replies. So, I tried manually adding 4.8.3 (MinGW) and Creator gives me a message:
"Qt version is not properly installed, please run make install"
So...what did I do wrong, and where am I supposed to run "make install?"
Any suggestions? I don't mind doing a fresh install if that would get me over this hump.
Other people got the same error message at http://www.qtcentre.org/threads/35130-Error-quot-QT-version-is-not-properly-installed-please-run-make-install-quot-on-Windows-XP and http://qt-project.org/forums/viewthread/7026 -- not sure if they're the same problem as your, but let's try.
Some diagnosis questions:
How did you install Qt 4.8.3?
How did you install Qt Creator?
After you told Qt Creator where to find Qt 4.8.3, did you re-configure your project (or start a new project) to use Qt 4.8.3?
One other thing: The pre-built libraries for MinGW are incompatible with the latest MinGW with GCC 4.7; you'll need GCC 4.4. I'm using the MinGW that came with the latest Qt SDK. (However, I don't think this is the cause of your error message. Using an incompatible GCC would still compile successfully, but crash at runtime)
- I pulled the libraries off of http://qt-project.org/downloads and just ran the installers
- I don't recall
- No...I figured I should get the installation right before trying to use it.
I haven't seen that error before, so I'm not sure what's going on, sorry
Since you just ran an official installer, Qt itself should be fine.
It might be worth putting your Qt4.8.3\bin folder in your PATH, uninstall Creator, reboot, and reinstall Qt Creator (you can get version 2.5.2 from the download page) -- and have it auto-detect your Qt installation
Hmm...still not working. It found the 4.8.3 directory from PATH, but didn't accept the version of qmake (same error as before). Currently I'm stuck with 4.8.1 for MSVC2010; this is going to pose a real problem very soon.
I even uninstalled and downloaded a new copy of the SDK for this effort...not sure where to go from here. I hesitate to file a bug report, since I'm pretty sure I'm doing something wrong, but...options are getting low at this point.
Any suggestions, anyone? The goal is to install and configure Creator in such a way that I can use the 4.8.3 libraries (MinGW and MSVC) at my option. I welcome any suggestions.
I'm at a loss, sorry -- no idea what could be the problem, or what to look for. The steps you've taken seem correct to me.
In the Build & Run menu, hover your mouse over the Qt version; it should display a long list of installatio macros/variables, pointing to parts of your installation folder (see screenshot). Does yours look similar?
Hovering over my 4.8.1 reveals something similar (though everything is for msvc2010). Hovering over 4.8.3 just says it's an invalid Qt version.
Is it possible that I somehow got a version of Creator that's not compatible with MinGW?
AFAIK, Creator is (should be) capable of handling all supported compilers at once; there's no compiler-specific version of Creator, unlike the Qt libraries.
Your error message originated from this source file: http://qt.gitorious.org/qt-creator/qt-creator/blobs/master/src/plugins/qtsupport/baseqtversion.cpp You could try reverse-engineering it to see what Creator thinks is missing
OK...I think I have it working now.
For posteriority, here's what I did:
- I deleted everything from my Qt install (using the maintenance tool and then deleting the other directories with the libs, etc.), and reinstalled from scratch:
Qt Libs 4.8.3 (MinGW 4.4)
Qt Creator 2.5.2
Manually added the MinGW tool chain (even though there was already an entry), selected the g++.exe binary and the pythongdb debugger.
Manually added 4.8.3 to my Qt Versions.
Selected 4.8.3 in my build settings.
And now I seem to be back in battery.
Thanks for all the help, JKSH...I appreciate it.
OK, I may have a new issue here. As noted above, I got this working with MinGW, which I'd installed into C:\Qt\4.8.3 per the installers recommendation. Today I was going to try to install the libraries for MSVC, and the installer wants to install into the same location as above. If I do this, I'm going to overwrite files and cause general confusion, right?
Yep, installing into the same folder would do bad things :)
You can choose ANY new folder you want -- it won't affect Qt's ability to function. Even C:\PacMan\ will do, but I'd suggest something along the lines of C:\Qt\4.8.3_msvc\
P.S. And for consistency, the other installation could go into C:\Qt\4.8.3_mingw\ , but it's not necessary to disturb your private installation, if you can remember which is which
Yeah, that's what I figured. Since I already installed the MinGW version into \Qt\4.8.3, I guess I should remove this and re-install, huh?
You're welcome. :) Whether you remove and reinstall or not is completely up to you -- Qt doesn't care. I would do it, because (1) I like a tidy and consistent computing environment, and (2) Qt Creator displays the name of your installation root in your "Qt Versions" list
Actually, point (2) made me realize something: It probably looks nicer to install into C:\Qt\4.8.3\mingw\ and C:\Qt\4.8.3\msvc2010\ instead of C:\Qt\4.8.3_mingw\ and C:\Qt\4.8.3_msvc\ ... because Qt Creator will then say
"Qt 4.8.3 (mingw)" and "Qt 4.8.3 (msvc2010)"
"Qt 4.8.3 (4.8.3_mingw)" and "Qt 4.8.3 (4.8.3_msvc)"
This is very useful; I think I'm almost there. Should I create a manual entry for the MSVC tool chain like I did for MinGW?
I'm also getting some linker errors, stemming from my attempt to use sockets. According to the Microsoft online documentation, I should be including this library (which I am):
@_WIN32:libs += "C:/Program Files (x86)/Windows Kits/8.0/Lib/win8/um/x86/ws2_32.lib"@
Any idea what might be going on here?
I've always found manual setup easier than auto-detection, since I don't need to worry about the order of installation (the latter requires a library-and-then-Creator order). Also, I can remove/upgrade my manual installation at any time -- Creator will complain if an auto-detected library is removed, and won't auto-detect a version upgrade.
Thanks, JKSH. I got the libraries properly installed, and can build with MinGW. Trying to build with MSVC is giving me some problems that aren't Qt/Creator related, so I'm getting help in another forum for those.
More as it happens...
OK, I think I'm really close to wrapping this up. Here's the final (for now!) loose end:
MinGW and MSVC use different libraries for socket functions. MSVC uses ws2_32.lib, which I believe is the "standard" library for this purpose. MinGW, on the other hand, uses libws2_32.a.
So...how do I create entries in my .pro file that will work for both tool chains? (I assume that I want to use the different libraries for the respective tool chains.)
Hmm... I'm not sure. Does the `-lws2_32' flag not work for both versions of the library?
It might be worth starting a new thread, to get a new set of eyes.
I wasn't familiar with that flag. How does one set linker flags within Creator? I tried using the QMAKE_LFLAGS option in my .pro file, but that didn't work (probably because it isn't a qmake flag).
LIBS += -lws2_32
(although, I just realized it might be a GCC flag)
Ahh...I didn't realize that LIBS did double duty (specifying both libraries and flags). Excellent, and thanks for all the help.
No problem :) Glad to hear that your setup has finally succeeded