March 22, 2012

ludde ludde
Lab Rat
325 posts

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?

14 replies

March 22, 2012

koahnig koahnig
Area 51 Engineer
2873 posts

Which IDE are you using?

I have used msvc 2005 and compiled for wince 5. I had to add only the -stl switch and all worked like a charm.

March 22, 2012

ludde ludde
Lab Rat
325 posts

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.

March 22, 2012

koahnig koahnig
Area 51 Engineer
2873 posts

Do you have std::string support for programs without Qt?

March 22, 2012

ludde ludde
Lab Rat
325 posts

Yes, it’s just the conversion functions that don’t work. I have to use .c_str() instead, to convert from a std::string, which seems to work, but may cause problems. Converting to a std::string is even more awkward (e.g. toLatin1().data()).

March 22, 2012

koahnig koahnig
Area 51 Engineer
2873 posts

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.

March 25, 2012

koahnig koahnig
Area 51 Engineer
2873 posts

“@“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.

  1.    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
  2. 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.

April 2, 2012

ludde ludde
Lab Rat
325 posts

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?

April 2, 2012

ludde ludde
Lab Rat
325 posts

OK. Looked into this some more, and am even more confused now…
The unresolved functions are both inlined in the qstring.h file.
How is it even possible to get an unresolved symbol linker error for an inlined function?

April 2, 2012

koahnig koahnig
Area 51 Engineer
2873 posts

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.

April 2, 2012

ludde ludde
Lab Rat
325 posts

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. :(

April 2, 2012

koahnig koahnig
Area 51 Engineer
2873 posts

Is there a particular reason to use stlport?
I am using stl as well and since I did not install anything for supporting stl, it must be what comes with msvc 2005 or possibly standard sdk.

April 4, 2012

ludde ludde
Lab Rat
325 posts

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.

April 4, 2012

koahnig koahnig
Area 51 Engineer
2873 posts

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.

April 4, 2012

ludde ludde
Lab Rat
325 posts

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?

 
  ‹‹ (solved)symbianvibration example does not work in my N8      Analog widgets for embedded device problem ››

You must log in to post a reply. Not a member yet? Register here!