Unable to use std::string to/from QString conversion on Windows CE
Trying to build Qt 4.7.4 on Windows CE with STL support by using the -stl configure option and making sure I have not defined QT_NO_STL in my qconfig file. Still, I am unable to use the QString::toStdString() and QString::fromStdString() functions.
The error I get is a link error, so it seems they are included in the header files, but not built into the libraries.
Has anyone else had this problem and/or can think of a way to solve it?
Also using MSVC 2005. Nice to know it should be possible to make it work at least… :)
My guess is that there is something in our config that makes it define QT_NO_STL even though we don’t do it explicitly. Alternatively, Qt has some kind of problem finding STL, because of some weirdness in our Windows CE SDK.
As I wrote I had never an issue besides forgetting in the first configure. However, I did only the compilation up to Qt 4.7.2
You are cross-compiling for wince5 or for some other version?
I am using .c_str() frequently, because it seems to be easier for me. The other way around looks really ackward.
“@“ludde Yesterday evening I started to build the opensource version 4.7.4 for wince 5. Since I am testing an application on wince I thought I could check easily, if I have the same problem as you.
Well, thought was wrong. I have problems to get through the compilation of Qt itself.
- Creating library ..\..\lib\QtGuid4.lib and object ..\..\lib\QtGuid4.exp pngwrite.obj : error LNK2019: unresolved external symbol gmtime referenced in function png_convert_from_time_t ..\..\lib\QtGuid4.dll : fatal error LNK1120: 1 unresolved externals
- NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\bin\x86_arm\link.EXE"' : return code '0x460'
I have configured the version as I had before the previous versions. Either some of the libs have changed on my machine, which I do not anticipate or something in Qt setup is different. For me it is not issue, since I can life with the previous versions.
I think you can get around this by removing the definition of PNG_CONVERT_tIME_SUPPORTED for Windows CE in src/3rdparty/libpng/pnglibconf.h. (We’ve done that, although I don’t remember exactly why…)
I’ve tried again to build with STL support, but still get link errors for toStdString and fromStdString. Compilation is fine, so QT_NO_STL is definitely not defined. Wonder if it can have something to do with our use of stlport?
I have commented out the define you suggested and the compilation does. Well, it is still … . Needs a bit of time.
Just as a question are you changed something of the optimization setting for inline?
Configuration Properties->C/C++->Optimization->Inline Function Expansion
This is default in my compilations. And I will test it with 4.7.4 as soon as it is finished.
I think I found the problem now. We are using stlport, but we have not built Qt against stlport. So there is some mismatch in the signatures for these functions.
Problem is, when I try to build Qt against stlport, it fails because stlport does not define uncaught_exception. So I’m not really sure how to solve it, even though I know what the problem is. :(
I’m not sure of the exact reasons, they were using stlport here before I started. But I think in general stlport is considered a more efficient, reliable and compliant implementation of stl compared to the Microsoft implementation. At least I think it has been so in the past – it might have changed.
As already posted I am using the ms stl implementation and had never an issue on win ce. The same application is also compiled on linux.
I have successfully compiled the qt 4.7.4 after removing the define as you have recommended. However, I ran into the next problem when trying to add the version to my msvc installation. It did not add it. After several trials I have given up. At the moment I cannot verify that the QString conversation would work on my machine.
Well, for us I think changing the stl implementation we use on the device is a bigger task than making Qt work with stlport. But if we cannot make it work with stlport, I guess we might consider that.
Regarding adding Qt 4.7.4 to msvc – you mean adding it to the Qt add-in? I think you have to start Visual Studio as administrator to be able to do that. Maybe that’s the problem?