Re: [Development] Using gcc to build arm version
Another thing: it seems that the libstdc++.so is based on Linux OS, so it can't be used for target build... So for the gcc/g++, is there a standalone library for c++ support ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Monday, October 08, 2012 1:38 PM To: thiago.macie...@intel.com; development@qt-project.org Subject: Re: [Development] Using gcc to build arm version readelf -s -W libsupc++.a | grep UND, still shows: _ZTVN10__cxxabiv120__si_class_type_infoE _ZTVN10__cxxabiv121__vmi_class_type_infoE _ZTVN10__cxxabiv117__class_type_infoE Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Monday, October 08, 2012 1:24 PM To: development@qt-project.org Subject: Re: [Development] Using gcc to build arm version On segunda-feira, 8 de outubro de 2012 15.18.10, Lincoln Ramsay wrote: On 08/10/12 15:09, song.7@nokia.com wrote: collect2 (4.4.1) is used to link. If you're linking something that includes C++ you should really use g++ as the linker. If you're going to invoke ld directly, you need to ensure the appropriate flags are set so it includes the C++ runtime. Apparently the library you want is libsupc++.a and it'll be somewhere in your toolchain/sysroot directory. libsupc++.a is included in libstdc++.so, which comes with most GCC installations. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Using gcc to build arm version
Thanks Lincoln, libsupc++.a library is the answer ! -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Monday, October 08, 2012 2:16 PM To: thiago.macie...@intel.com; development@qt-project.org Subject: Re: [Development] Using gcc to build arm version Another thing: it seems that the libstdc++.so is based on Linux OS, so it can't be used for target build... So for the gcc/g++, is there a standalone library for c++ support ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Monday, October 08, 2012 1:38 PM To: thiago.macie...@intel.com; development@qt-project.org Subject: Re: [Development] Using gcc to build arm version readelf -s -W libsupc++.a | grep UND, still shows: _ZTVN10__cxxabiv120__si_class_type_infoE _ZTVN10__cxxabiv121__vmi_class_type_infoE _ZTVN10__cxxabiv117__class_type_infoE Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Monday, October 08, 2012 1:24 PM To: development@qt-project.org Subject: Re: [Development] Using gcc to build arm version On segunda-feira, 8 de outubro de 2012 15.18.10, Lincoln Ramsay wrote: On 08/10/12 15:09, song.7@nokia.com wrote: collect2 (4.4.1) is used to link. If you're linking something that includes C++ you should really use g++ as the linker. If you're going to invoke ld directly, you need to ensure the appropriate flags are set so it includes the C++ runtime. Apparently the library you want is libsupc++.a and it'll be somewhere in your toolchain/sysroot directory. libsupc++.a is included in libstdc++.so, which comes with most GCC installations. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] Using gcc to build arm version
Hi, We are building the mesa for Qt, and the gcc is used to build out ARM version. But the bellow symbols is reported as undefined: _ZTVN10__cxxabiv120__si_class_type_infoE _ZTVN10__cxxabiv121__vmi_class_type_infoE _ZTVN10__cxxabiv117__class_type_infoE These symbols should be provided by compiler itself, right ? So is there some compile / link flag required ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Using gcc to build arm version
collect2 (4.4.1) is used to link. Thanks, Song From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Lincoln Ramsay Sent: Monday, October 08, 2012 1:00 PM To: development@qt-project.org Subject: Re: [Development] Using gcc to build arm version On 08/10/12 14:57, song.7@nokia.commailto:song.7@nokia.com wrote: We are building the mesa for Qt, and the gcc is used to build out ARM version. But the bellow symbols is reported as undefined: _ZTVN10__cxxabiv120__si_class_type_infoE _ZTVN10__cxxabiv121__vmi_class_type_infoE _ZTVN10__cxxabiv117__class_type_infoE These symbols should be provided by compiler itself, right ? So is there some compile / link flag required ? Did you use 'gcc' to link instead of 'g++' ? -- Link ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Using gcc to build arm version
readelf -s -W libsupc++.a | grep UND, still shows: _ZTVN10__cxxabiv120__si_class_type_infoE _ZTVN10__cxxabiv121__vmi_class_type_infoE _ZTVN10__cxxabiv117__class_type_infoE Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Monday, October 08, 2012 1:24 PM To: development@qt-project.org Subject: Re: [Development] Using gcc to build arm version On segunda-feira, 8 de outubro de 2012 15.18.10, Lincoln Ramsay wrote: On 08/10/12 15:09, song.7@nokia.com wrote: collect2 (4.4.1) is used to link. If you're linking something that includes C++ you should really use g++ as the linker. If you're going to invoke ld directly, you need to ensure the appropriate flags are set so it includes the C++ runtime. Apparently the library you want is libsupc++.a and it'll be somewhere in your toolchain/sysroot directory. libsupc++.a is included in libstdc++.so, which comes with most GCC installations. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] Perf about loading one 240x320 png image
Hi, I am testing the image loading performance in Qt5, that the image with different location (qt resource or file system) and using QImage or QPixmap. Testing is based on a low end devices, and the result is shared as bellow: Loading perf (240x320 png image) from resource from file system QImage 1.135s 1.132s QPixmap 1.146s 1.182s It seems the performance is really bad,,, does anyone have some insight about which place can be the bottleneck ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] Text rendering in Qt5
Hi, Is there some wikis or blogs about how does the text rendering work in Qt5 ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] About QML depends on opengl
Hi, We are trying to port the mesa. But there is one question related with OpenGL. In Linux, we can create OpengGL context using glXCreateContextAttribsARB, then glXMakeCurrent will binding this context to a window. But we don't understand how does the GL operation such as glClearColor etc. know what's the current context for drawing ? For example: ctx = glXCreateContextAttribsARB( display, bestFbc, 0, True, context_attribs ); glXMakeCurrent( display, win, ctx ); glClearColor ( 1, 0.5, 0, 1 ); glClear ( GL_COLOR_BUFFER_BIT ); Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thomas McGuire Sent: Friday, August 10, 2012 5:19 PM To: development@qt-project.org; Han Maokun (Nokia-MP/Beijing) Subject: Re: [Development] About QML depends on opengl Hi, On Friday 10 August 2012 10:56:27 song.7@nokia.com wrote: From the code, it seems that QML will depend on the opengl, but is there a way to remove such dependency ? Because our platform doesn't support opengl yet. It is not possible to remove the OpenGL dependency, the scenegraph code is quite deeply integrated into the QtQuick UI elements. What you can do is use llvmpipe + mesa to get somewhat faster software rendering. Regards, Thomas -- Thomas McGuire | thomas.mcgu...@kdab.com | Software Engineer KDAB (Deutschland) GmbHCo KG, a KDAB Group company Tel. Germany +49-30-521325470, Sweden (HQ) +46-563-540090 KDAB - Qt Experts - Platform-independent software solutions ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] About copying the image buffer with alpha blending
Hi, We found that QPainer::drawImage takes 30~50ms for one 150*114 image, it seems a little slow. One quick optimization to try is: we want to do the memory copy to the backing store buffer directly instead of using the PaintRasterEngine. So from Qt, is there a helper function can copy the memory of image with alpha blending ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] FW: how to improve GraphicsView performance
Hi, FYI. Can someone help us here ? thanks very much ;) Thanks, Song From: Jiang Wenjun (Nokia-MP/Beijing) Sent: Tuesday, August 21, 2012 4:21 PM To: Liu Song.7 (Nokia-MP/Beijing) Subject: FW: how to improve GraphicsView performance Importance: High Hi, all I'm using QGraphicsView to implement google weather in a low-end(CPU: 300MHz) hardware. All are nice except the performance. When I set the position of the GraphicsItems, the refresh rate is quite slow. Code about item moving is here. void GraphicsView::mouseMoveEvent(QMouseEvent *event) { QPoint current_pos = event-pos(); int deltaY = current_pos.y() - m_lastPos.y(); int current_weatherY = m_currentweatherwidget-pos().y(); if ((current_weatherY + deltaY -320) (current_weatherY + deltaY = 0)) { m_currentweatherwidget-setY(current_weatherY + deltaY); int forecast_weatherY = m_forecastweatherwidget-pos().y(); m_forecastweatherwidget-setY(forecast_weatherY+deltaY); } m_lastPos = event-pos(); event-accept(); } I tried many methods to optimize the performance, all seem no effect, including: 1. setCacheMode(QGraphicsView::CacheBackground) 2. scene-setItemIndexMethod(QGraphicsScene::NoIndex) 3. setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); 4. setOptimizationFlags(QGraphicsView::DontAdjustForAntialiasing | QGraphicsView::DontSavePainterState | QGraphicsView::DontClipPainter); 5. QGraphicsItem::setCacheMode(QGraphicsItem::DeviceCoordinateCache) ... Is there any other idea? Thanks! Best regards! -Jiang wenjun ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] About QML depends on opengl
Thanks for pointing out the dependency, but it seems that replacing the QtQuick2 has bigger effort than adding the opengl support. -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Alpert Alan (Nokia-MP/Brisbane) Sent: Tuesday, August 14, 2012 2:50 PM To: development@qt-project.org Cc: Han Maokun (Nokia-MP/Beijing) Subject: Re: [Development] About QML depends on opengl On Fri, 10 Aug 2012 11:18:59 ext Thomas McGuire wrote: Hi, On Friday 10 August 2012 10:56:27 song.7@nokia.com wrote: From the code, it seems that QML will depend on the opengl, but is there a way to remove such dependency ? Because our platform doesn't support opengl yet. It is not possible to remove the OpenGL dependency, the scenegraph code is quite deeply integrated into the QtQuick UI elements. What you can do is use llvmpipe + mesa to get somewhat faster software rendering. It's also worth pointing out that it isn't QML that depends on openGL, it's the QtQuick 2.0 module. You can create your own GUI primitives or controls which use software painting, and then use them in QML instead of QtQuick. -- Alan Alpert ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] 回复: Re: qthread exiting
Ok, these two pthrea_cleanup_push/pop are not implemented in our pthread, but i think it should be easy to add them. Thanks ! -原信息- 发件人: ext Thiago Macieira 发送: 2012/08/14, 16:28 收件人: development@qt-project.org 主题: Re: [Development] qthread exiting On terça-feira, 14 de agosto de 2012 07.36.31, song.7@nokia.com wrote: Hi, When the thread is exiting the destroy_current_thread_data will be called, and only if the thread data is adopted, the QThreadPrivate::finish is called. But normally the thread data always have the isAdopted with false, then this thread 's status is still running even if it's exited. So could somebody share when will the QThreadPrivate::finish be called during thread exiting ? And what's the QAdoptedThread for? As only creating the AdoptedThread then the thread data' isAdopted will be set as true. Adopted threads are a weird concept you're likely not going to find. The adopted threads were invented, as far as I remember, to support Qt Jambi, when threads were created by the JVM instead of by QThread. But it allows one to use QObjects and even event-loop items in threads not started with QThread. QThreadPrivate::finish is run by pthreads cleanup solution. See QThreadPrivate::start: pthread_cleanup_push(QThreadPrivate::finish, arg); [...] thr-run(); pthread_cleanup_pop(1); Here we have a perfect example of The Boolean Trap, with a C twist. void pthread_cleanup_pop(int execute); The pthread_cleanup_pop() function removes the routine at the top of the stack of clean-up handlers, and optionally executes it if _execute_ is nonzero. So pthread_cleanup_pop calls finish(), and it's also called in case the thread is cancelled. As for destroy_current_thread_data, it's also run by pthreads, maybe at a different moment. It's a callback by the pthread_specific, added by pthread_key_create in create_current_thread_data_key. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] perl version required in latest Qt5
Hi, I remember that Perl 5.8 could work with Qt5 alpha, but it seems that a higher version of perl is required in latest Qt5. So which version of perl should be used now ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] About QML depends on opengl
Hi, From the code, it seems that QML will depend on the opengl, but is there a way to remove such dependency ? Because our platform doesn't support opengl yet. Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] QtGui depends on libPlatformSupport.a
Hi, From the Qt build system, does any file decide the QtGui depending on the PlatformSupport lib ? Any information is appreciated ;) Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] how to reduce the relocation -- Use static qt libraries
Hi, I want to share some result about the relocation during the loading (with RTLD_LAZY). Relocation count for single so (libqt5) + without optimization: R_ARM_GLOB_DAT: 1585 R_ARM_RELATIVE: 9823 R_ARM_ABS32: 19489 R_ARM_JUMP_SLOT: 16998 Relocation count for single so (libqt5) + with optimization: R_ARM_GLOB_DAT: 1578 R_ARM_RELATIVE: 28227 R_ARM_ABS32: 435 R_ARM_JUMP_SLOT: 290 And the optimization done here is only about changing the visibility of exported symbols from default to protected, thanks Thiago's blog ;). So: - the R_ARM_JUMP_SLOT relocation is reduced significantly, but which is only happened at run time (as RTLD_LAZY), so it's irrelevant with the loading performance. - the R_ARM_RELATIVE relocation is increase but this type relocation is very fast. - actually for loading time, the bottleneck is the R_ARM_ABS32 relocation, which is reduced around 97% now ! Finally the overall loading time is reduced from ~10-20s to ~1s... But I still have some question about the R_ARM_ABS32 relocation. It seems if the function is virtual (with default visibility), then it will be added into .rel.dyn as the R_ARM_ABS32 type, for example: 007b0124 0011a802 R_ARM_ABS3200311e4b _ZN20QEventDispatcherUNIX13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE Could someone help with below: 1. why the virtual function with default visibility needs relocation even if it's implemented inside ? 2. when changed to protected visibility, I guess it's optimized to add a GOT.PLT entry as a R_ARM_RELATIVE relocation, is that true ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Tuesday, July 24, 2012 10:29 PM To: development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries On terça-feira, 24 de julho de 2012 13.22.25, song.7@nokia.com wrote: Yes, the bottleneck of the loading now is the local relocations instead of inter-library's. So what we want to do will be reducing the number of local relocation. Based on my understanding, this local relocation should be caused by the symbol inter-positioning. That's not exactly the case. Some types of relocations do permit symbol interpositioning. But some types of code require relocations even if they're not interposable. In my listing, all the local relocations are non-interposable. More information: http://www.macieira.org/blog/2012/01/sorry-state-of-dynamic-libraries-on- linux/ http://www.macieira.org/blog/2012/01/update-and-benchmark-on-the-dynamic- library-proposals/ And from gcc option -Bsymbolic: When creating a shared library, bind references to global symbols to the definition within the shared library, if any. Normally, it is possible for a program linked against a shared library to override the definition within the shared library. This option is only meaningful on ELF platforms which support shared libraries. But for my case, it's not needed to override the definition within the libqt5.so. Yes, it is. But you didn't realise that your code requires relocations even if the symbols can't be overridden. In order to do that, you need a fully position *dependent* code that can't be moved. Executables on Linux are like that, but all libraries are movable in memory, even those compiled without -fPIC. Since you're not running Linux, check if your OS supports that. Note that you'll need to know the exact load address at build time and that it must match the loaded address for the ROM if you want to do XIP. So, besides the prelink solution, I think the compiler (I mean armlink) should provide the ability to disable this symbol inter-positioning, just like the -Bsymbolic in gcc. Does anyone have idea from the compiler point of view ? Sorry, you're barking up the wrong tree. Your only option to reduce the number of relocations is to prelink to the exact load address. There are two ways of doing that: 1) the ELF prelinker, which prelinks all relocations to a given address, but does still allow relocating if the shared object is loaded at a different address. The code is PIC, so XIP should work just fine. 2) compile without PIC and prelink at a specific address at link time, which means that the code must be loaded there or it will fail to run. This is the Windows DLL model. Also I see that Qt also uses the -Bsymbolic-functions to do some optimization, is that similar case to reduce the relocation ? Yes. Read my blogs for more detail. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list
Re: [Development] how to reduce the relocation -- Use static qt libraries
Probably, I know that the R_ARM_ABS32 is about *reference* the address of a function. For C++ virtual class, then the virtual table will not know the actual address of the virtual functions, which is with _default_ visibility. So a R_ARM_ABS32 relocation is needed. After changed with _protected_ visibility, that kind of relocation is reduced, but I still don't know why more R_ARM_RELATIVE relocation introduced. Anything wrong please correct me ;-) Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Sunday, July 29, 2012 4:13 PM To: thiago.macie...@intel.com; development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries Hi, I want to share some result about the relocation during the loading (with RTLD_LAZY). Relocation count for single so (libqt5) + without optimization: R_ARM_GLOB_DAT: 1585 R_ARM_RELATIVE: 9823 R_ARM_ABS32: 19489 R_ARM_JUMP_SLOT: 16998 Relocation count for single so (libqt5) + with optimization: R_ARM_GLOB_DAT: 1578 R_ARM_RELATIVE: 28227 R_ARM_ABS32: 435 R_ARM_JUMP_SLOT: 290 And the optimization done here is only about changing the visibility of exported symbols from default to protected, thanks Thiago's blog ;). So: - the R_ARM_JUMP_SLOT relocation is reduced significantly, but which is only happened at run time (as RTLD_LAZY), so it's irrelevant with the loading performance. - the R_ARM_RELATIVE relocation is increase but this type relocation is very fast. - actually for loading time, the bottleneck is the R_ARM_ABS32 relocation, which is reduced around 97% now ! Finally the overall loading time is reduced from ~10-20s to ~1s... But I still have some question about the R_ARM_ABS32 relocation. It seems if the function is virtual (with default visibility), then it will be added into .rel.dyn as the R_ARM_ABS32 type, for example: 007b0124 0011a802 R_ARM_ABS3200311e4b _ZN20QEventDispatcherUNIX13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE Could someone help with below: 1. why the virtual function with default visibility needs relocation even if it's implemented inside ? 2. when changed to protected visibility, I guess it's optimized to add a GOT.PLT entry as a R_ARM_RELATIVE relocation, is that true ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Tuesday, July 24, 2012 10:29 PM To: development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries On terça-feira, 24 de julho de 2012 13.22.25, song.7@nokia.com wrote: Yes, the bottleneck of the loading now is the local relocations instead of inter-library's. So what we want to do will be reducing the number of local relocation. Based on my understanding, this local relocation should be caused by the symbol inter-positioning. That's not exactly the case. Some types of relocations do permit symbol interpositioning. But some types of code require relocations even if they're not interposable. In my listing, all the local relocations are non-interposable. More information: http://www.macieira.org/blog/2012/01/sorry-state-of-dynamic-libraries-on- linux/ http://www.macieira.org/blog/2012/01/update-and-benchmark-on-the-dynamic- library-proposals/ And from gcc option -Bsymbolic: When creating a shared library, bind references to global symbols to the definition within the shared library, if any. Normally, it is possible for a program linked against a shared library to override the definition within the shared library. This option is only meaningful on ELF platforms which support shared libraries. But for my case, it's not needed to override the definition within the libqt5.so. Yes, it is. But you didn't realise that your code requires relocations even if the symbols can't be overridden. In order to do that, you need a fully position *dependent* code that can't be moved. Executables on Linux are like that, but all libraries are movable in memory, even those compiled without -fPIC. Since you're not running Linux, check if your OS supports that. Note that you'll need to know the exact load address at build time and that it must match the loaded address for the ROM if you want to do XIP. So, besides the prelink solution, I think the compiler (I mean armlink) should provide the ability to disable this symbol inter-positioning, just like the -Bsymbolic in gcc. Does anyone have idea from the compiler point of view ? Sorry, you're barking up the wrong tree. Your only option to reduce the number of relocations is to prelink to the exact load address. There are two ways of doing that: 1) the ELF
Re: [Development] how to reduce the relocation -- Use static qt libraries
After changed with _protected_ visibility, that kind of relocation is reduced, but I still don't know why more R_ARM_RELATIVE relocation introduced. Answer my own question, that is because the loading address of the module needs to be added to know actual address of each virtual functions. So for the qt(5), should we change all the exported symbol 's visibility to _protected_ ? Or is there still some exited use case to use _default_ visibility ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Sunday, July 29, 2012 6:02 PM To: thiago.macie...@intel.com; development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries Probably, I know that the R_ARM_ABS32 is about *reference* the address of a function. For C++ virtual class, then the virtual table will not know the actual address of the virtual functions, which is with _default_ visibility. So a R_ARM_ABS32 relocation is needed. After changed with _protected_ visibility, that kind of relocation is reduced, but I still don't know why more R_ARM_RELATIVE relocation introduced. Anything wrong please correct me ;-) Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Sunday, July 29, 2012 4:13 PM To: thiago.macie...@intel.com; development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries Hi, I want to share some result about the relocation during the loading (with RTLD_LAZY). Relocation count for single so (libqt5) + without optimization: R_ARM_GLOB_DAT: 1585 R_ARM_RELATIVE: 9823 R_ARM_ABS32: 19489 R_ARM_JUMP_SLOT: 16998 Relocation count for single so (libqt5) + with optimization: R_ARM_GLOB_DAT: 1578 R_ARM_RELATIVE: 28227 R_ARM_ABS32: 435 R_ARM_JUMP_SLOT: 290 And the optimization done here is only about changing the visibility of exported symbols from default to protected, thanks Thiago's blog ;). So: - the R_ARM_JUMP_SLOT relocation is reduced significantly, but which is only happened at run time (as RTLD_LAZY), so it's irrelevant with the loading performance. - the R_ARM_RELATIVE relocation is increase but this type relocation is very fast. - actually for loading time, the bottleneck is the R_ARM_ABS32 relocation, which is reduced around 97% now ! Finally the overall loading time is reduced from ~10-20s to ~1s... But I still have some question about the R_ARM_ABS32 relocation. It seems if the function is virtual (with default visibility), then it will be added into .rel.dyn as the R_ARM_ABS32 type, for example: 007b0124 0011a802 R_ARM_ABS3200311e4b _ZN20QEventDispatcherUNIX13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE Could someone help with below: 1. why the virtual function with default visibility needs relocation even if it's implemented inside ? 2. when changed to protected visibility, I guess it's optimized to add a GOT.PLT entry as a R_ARM_RELATIVE relocation, is that true ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Tuesday, July 24, 2012 10:29 PM To: development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries On terça-feira, 24 de julho de 2012 13.22.25, song.7@nokia.com wrote: Yes, the bottleneck of the loading now is the local relocations instead of inter-library's. So what we want to do will be reducing the number of local relocation. Based on my understanding, this local relocation should be caused by the symbol inter-positioning. That's not exactly the case. Some types of relocations do permit symbol interpositioning. But some types of code require relocations even if they're not interposable. In my listing, all the local relocations are non-interposable. More information: http://www.macieira.org/blog/2012/01/sorry-state-of-dynamic-libraries-on- linux/ http://www.macieira.org/blog/2012/01/update-and-benchmark-on-the-dynamic- library-proposals/ And from gcc option -Bsymbolic: When creating a shared library, bind references to global symbols to the definition within the shared library, if any. Normally, it is possible for a program linked against a shared library to override the definition within the shared library. This option is only meaningful on ELF platforms which support shared libraries. But for my case, it's not needed to override the definition within the libqt5.so. Yes, it is. But you didn't realise that your code requires relocations even if the symbols
Re: [Development] how to reduce the relocation -- Use static qt libraries
Wow! Any chance you can blog about this somewhere? If you don't, I will based on your data. No, I don't have a public blog. So please go ahead, thanks ! -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Sunday, July 29, 2012 9:10 PM To: development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries On domingo, 29 de julho de 2012 08.13.20, song.7@nokia.com wrote: - actually for loading time, the bottleneck is the R_ARM_ABS32 relocation, which is reduced around 97% now ! Finally the overall loading time is reduced from ~10-20s to ~1s... Wow! Any chance you can blog about this somewhere? If you don't, I will based on your data. But I still have some question about the R_ARM_ABS32 relocation. It seems if the function is virtual (with default visibility), then it will be added into .rel.dyn as the R_ARM_ABS32 type, for example: 007b0124 0011a802 R_ARM_ABS3200311e4b _ZN20QEventDispatcherUNIX13processEventsE6QFlagsIN10QEventLoop17Proces sEven tsFlagEE Could someone help with below: 1. why the virtual function with default visibility needs relocation even if it's implemented inside ? That's what default means: the symbol can be interposed by another, from a different library. It is possible that another library implements a different version of this function. If it weren't like that, if it resolved to the local library, it would be behaviour of protected visibility. That is: 2. when changed to protected visibility, I guess it's optimized to add a GOT.PLT entry as a R_ARM_RELATIVE relocation, is that true ? The virtual table gets a relative relocation, true. Virtual calls don't need PLT entries since they're always indirect. The PLT for a virtual function only shows up if that function is called non-virtually: that is, from the constructor, when the full class name was specified or when the compiler could prove what class the object is. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] how to reduce the relocation -- Use static qt libraries
Hi, Finally we can build out and load the libqt5.so successfully, but the loading is still very slow because too many symbols are to be relocated. Even many of these relocated symbols are inside the libqt5.so, we suppose they should be resolved during the link time instead of loading time. And let's take the analogclock (from qtbase/examples/widgets) for example: void AnalogClock::paintEvent(QPaintEvent *) { ... ... } This paintEvent is implemented inside the analogclock.cpp, but readelf -r analogclock shows that: Relocation section '.rel.dyn' at offset 0x1b08 contains 72 entries: Offset InfoTypeSym.Value Sym. Name ... ... b090 6f02 R_ARM_ABS32 2933 _ZN11AnalogClock10pain ... ... We think this is not expected, so is there a way to avoid such unnecessary relocation ? Btw, I already test to build the qt with -reduce-relocation but still got same result. Thanks, Song -Original Message- From: Mcgovern Rohan (Nokia-MP/Brisbane) Sent: Tuesday, July 24, 2012 12:23 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: Lan Peng-Peter (Nokia-MP/Beijing); Storm-Olsen Marius (Nokia-MP/Austin); development; thiago.macieira Subject: RE: [Development] Use static qt libraries Importance: High Liu Song.7 (Nokia-MP/Beijing) said: Thanks, are such undefined symbols normal ? And is there a way to fix it ? Right now, the only thing which comes to mind is if you have somehow mixed some -frtti and -fno-rtti objects. -Original Message- From: Mcgovern Rohan (Nokia-MP/Brisbane) Sent: Tuesday, July 24, 2012 11:58 AM To: Liu Song.7 (Nokia-MP/Beijing) Cc: Lan Peng-Peter (Nokia-MP/Beijing); Storm-Olsen Marius (Nokia-MP/Austin); development; thiago.macieira Subject: Re: [Development] Use static qt libraries Importance: High song.7@nokia.com said: Hi, Now we can build out the single libqt5.so (using ARM toolchain) by: OPTS += -static to create the static qt libs ar -x libQtXX.a to extract the .o files armlink --fpic --shared *.o -o libqt5.so to generate final single so But the readelf -s libqt5.so | grep UND: 4: 0 OBJECT WEAK DEFAULT UND _ZTI12QFocusHelper 5: 0 OBJECT WEAK DEFAULT UND _ZTI17QAbstractUndoItem 6: 0 OBJECT WEAK DEFAULT UND _ZTI19QStaticTextUserData 7: 0 OBJECT WEAK DEFAULT UND _ZTI22QItemEditorCreatorB 8: 0 OBJECT WEAK DEFAULT UND _ZTI26QAbstractDynamicMet 9: 0 OBJECT WEAK DEFAULT UND _ZTI28QNetworkConfigurati Does anyone know what is this mangled symbol _ZTIXX in C++ ? The 'c++filt' program can answer this. $ echo _ZTI12QFocusHelper | c++filt typeinfo for QFocusHelper ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] how to reduce the relocation -- Use static qt libraries
More information that from gcc the -Wl,-Bsymbolic can be used to bind references to global symbols to the definition within the so, if any. So what's the symbolic consideration for ARM toolchain in qt ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Tuesday, July 24, 2012 2:40 PM To: Storm-Olsen Marius (Nokia-MP/Austin); thiago.macie...@intel.com; development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries Hi, Finally we can build out and load the libqt5.so successfully, but the loading is still very slow because too many symbols are to be relocated. Even many of these relocated symbols are inside the libqt5.so, we suppose they should be resolved during the link time instead of loading time. And let's take the analogclock (from qtbase/examples/widgets) for example: void AnalogClock::paintEvent(QPaintEvent *) { ... ... } This paintEvent is implemented inside the analogclock.cpp, but readelf -r analogclock shows that: Relocation section '.rel.dyn' at offset 0x1b08 contains 72 entries: Offset InfoTypeSym.Value Sym. Name ... ... b090 6f02 R_ARM_ABS32 2933 _ZN11AnalogClock10pain ... ... We think this is not expected, so is there a way to avoid such unnecessary relocation ? Btw, I already test to build the qt with -reduce-relocation but still got same result. Thanks, Song -Original Message- From: Mcgovern Rohan (Nokia-MP/Brisbane) Sent: Tuesday, July 24, 2012 12:23 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: Lan Peng-Peter (Nokia-MP/Beijing); Storm-Olsen Marius (Nokia-MP/Austin); development; thiago.macieira Subject: RE: [Development] Use static qt libraries Importance: High Liu Song.7 (Nokia-MP/Beijing) said: Thanks, are such undefined symbols normal ? And is there a way to fix it ? Right now, the only thing which comes to mind is if you have somehow mixed some -frtti and -fno-rtti objects. -Original Message- From: Mcgovern Rohan (Nokia-MP/Brisbane) Sent: Tuesday, July 24, 2012 11:58 AM To: Liu Song.7 (Nokia-MP/Beijing) Cc: Lan Peng-Peter (Nokia-MP/Beijing); Storm-Olsen Marius (Nokia-MP/Austin); development; thiago.macieira Subject: Re: [Development] Use static qt libraries Importance: High song.7@nokia.com said: Hi, Now we can build out the single libqt5.so (using ARM toolchain) by: OPTS += -static to create the static qt libs ar -x libQtXX.a to extract the .o files armlink --fpic --shared *.o -o libqt5.so to generate final single so But the readelf -s libqt5.so | grep UND: 4: 0 OBJECT WEAK DEFAULT UND _ZTI12QFocusHelper 5: 0 OBJECT WEAK DEFAULT UND _ZTI17QAbstractUndoItem 6: 0 OBJECT WEAK DEFAULT UND _ZTI19QStaticTextUserData 7: 0 OBJECT WEAK DEFAULT UND _ZTI22QItemEditorCreatorB 8: 0 OBJECT WEAK DEFAULT UND _ZTI26QAbstractDynamicMet 9: 0 OBJECT WEAK DEFAULT UND _ZTI28QNetworkConfigurati Does anyone know what is this mangled symbol _ZTIXX in C++ ? The 'c++filt' program can answer this. $ echo _ZTI12QFocusHelper | c++filt typeinfo for QFocusHelper ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Use static qt libraries
Thanks ! Last one is: 9: 0 OBJECT WEAK DEFAULT UND _ZTI28QNetworkConfigurationPrivate. -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Tuesday, July 24, 2012 7:07 PM To: development@qt-project.org Subject: Re: [Development] Use static qt libraries On terça-feira, 24 de julho de 2012 12.13.27, Thiago Macieira wrote: QFocusHelper This is a class defined in a .cpp, deriving from QWidget. So it has virtual methods by way of inheritance. But since it's in a .cpp, we have to conclude it's a compiler bug. QAbstractUndoItem This is a real, abstract class with pure virtuals, with a Q_GUI_EXPORT (!) and an inline (!!) destructor found in the .h (!!!). The destructor needs to be moved to a .cpp and de-inlined. QStaticTextUserData This is a private class, with a virtual inline destructor. The class is derived from in QtOpenGL. The destructor should be de-inlined and moved to the .cpp. QItemEditorCreatorBase Same as QAbstractUndoItem and same recommendations. QNetworkConfiguration QNetworkConfiguration has no virtual methods, so there should be no TI emitted for it. In fact, this is the odd-man out class in this list, so much so that I doubt that it's QNetworkConfiguration. The OP posted a list output from readelf, which cuts symbols. I'm going to guess here that it was either QNetworkConfigurationManager or QNetworkConfigurationManagerPrivate. Both classes have virtuals, both are exported from QtNetwork and both have their non-inline destructors in a .cpp file. Any of these three classes indicate a compiler bug. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] how to reduce the relocation -- Use static qt libraries
Yes, the bottleneck of the loading now is the local relocations instead of inter-library's. So what we want to do will be reducing the number of local relocation. Based on my understanding, this local relocation should be caused by the symbol inter-positioning. And from gcc option -Bsymbolic: When creating a shared library, bind references to global symbols to the definition within the shared library, if any. Normally, it is possible for a program linked against a shared library to override the definition within the shared library. This option is only meaningful on ELF platforms which support shared libraries. But for my case, it's not needed to override the definition within the libqt5.so. So, besides the prelink solution, I think the compiler (I mean armlink) should provide the ability to disable this symbol inter-positioning, just like the -Bsymbolic in gcc. Does anyone have idea from the compiler point of view ? Also I see that Qt also uses the -Bsymbolic-functions to do some optimization, is that similar case to reduce the relocation ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Tuesday, July 24, 2012 6:20 PM To: development@qt-project.org Subject: Re: [Development] how to reduce the relocation -- Use static qt libraries On terça-feira, 24 de julho de 2012 08.42.29, song.7@nokia.com wrote: Thanks, but can you detail more about the ELF pre-linking ? /sbin/prelink Indeed, I think prelinking is the only solution for your case. Given the statistics I posted on another email, the merging of libraries will not help a lot since the number of relocations that disappear is small. But note that ELF prelinking requires that the operating system supports it. We know that Linux does, but you mentioned that you're using something proprietary. For me: $ prelink -p | grep '^/.*Qt' /home/thiago/obj/qt/qt-4.8-release/lib/libQt3Support.so.4.8.0 [0xdb627b48] 0x00383480-0x003834ce5bf8: /home/thiago/obj/qt/qt-4.8-release/lib/libQtTest.so.4.8.0 [0x9d13ac84] 0x00381a60-0x00381a828af8: /home/thiago/obj/qt/qt-4.8-release/lib/libQtGui.so.4.8.0 [0x978b2ec7] 0x00381940-0x00381a189710: /home/thiago/obj/qt/qt-4.8-release/lib/libQtSql.so.4.8.0 [0x4bc61e3d] 0x003825e0-0x003826042ac0: /home/thiago/obj/qt/qt-4.8-release/lib/libQtWebKit.so.4.9.0 [0xfb691ee5] 0x00382de0-0x00382fac4bf8: /home/thiago/obj/qt/qt-4.8-release/lib/libQtMultimedia.so.4.8.0 [0x71012a29] 0x00381fc0-0x00381fe2cd30: /home/thiago/obj/qt/qt-4.8-release/lib/libQtNetwork.so.4.8.0 [0x2d86dad0] 0x003817a0-0x003817d6fd98: /home/thiago/obj/qt/qt-4.8-release/lib/libQtCore.so.4.8.0 [0xaad2da54] 0x00381600-0x003816502e30: /home/thiago/obj/qt/qt-4.8-release/lib/libQtXmlPatterns.so.4.8.0 [0xe849dcfd] 0x00383180-0x003831e75900: /home/thiago/obj/qt/qt-4.8-release/lib/libQtSvg.so.4.8.0 [0x8f513e75] 0x00381ae0-0x00381b058d68: /home/thiago/obj/qt/qt-4.8-release/lib/libQtDBus.so.4.8.0 [0x73fc0f52] 0x00381720-0x003817489eb0: /home/thiago/obj/qt/qt-4.8-release/lib/libQtOpenGL.so.4.8.0 [0x170b3bfa] 0x00383000-0x0038303098a0: /home/thiago/obj/qt/qt-4.8-release/lib/libQtXml.so.4.8.0 [0xc9f92297] 0x00381760-0x003817844f28: -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] Latest stable Qt5 code
Hi, Can somebody point out how to get the latest stale Qt5 code ? Is there some any tag for that ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Latest stable Qt5 code
Thanks, but about when will we have a beta release ? -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 9:40 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: Re: [Development] Latest stable Qt5 code Importance: High On 23/07/2012 08:34, ext song.7@nokia.com wrote: Hi, Can somebody point out how to get the latest stale Qt5 code ? The latest stale ;) Qt5 code should be what you get when you check out the master branch of qt5.git, as it and its submodules are only updated when the all the autotests pass (which in _theory_ should mean stable). Is there some any tag for that ? No, not until we have a Beta release. There's an alpha tag, but that's per definition not a stable release, and it's really old by now. -- .marius ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] Use static qt libraries
Hi, To use the static qt libraries, now I can build out all the libQtCore.a , libQtGui.a , libQtWidgets.a etc with option -static. Also I can create a new shared object libQtMaster.so which is composed of all of above static objects (libQtXXX.a), then I want my Qt application be dynamic linked with this libQtMain.so by: QT += master so how to create this new QT module master that can be used from the .pro files ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Use static qt libraries
Thanks for help. Is there any tool to link all of the separate shared libraries into one single shared library (libqt5.so) ? Thanks, Song -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 10:12 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: Re: [Development] Use static qt libraries Importance: High On 23/07/2012 08:56, ext song.7@nokia.com wrote: Hi, To use the static qt libraries, now I can build out all the libQtCore.a , libQtGui.a , libQtWidgets.a etc with option -static. Also I can create a new shared object libQtMaster.so which is composed of all of above static objects (libQtXXX.a), This would be all wrong. The only reason for compiling several modules into one would be (of the top of my head) to 1) Get cross-module optimizations (which indicate also cross-compile-unit optimizations, so you'll need a bin tools chain which can do that) to a) reduce code size, and b) improve performance. 2) Reduce number of exported symbols. 3) Faster shared library load time. To do this you would have to compile each of the modules as normal (shared library), and then have a step which links all of the object files into one shared library, maybe called just qt5.so Configuring as static only to gather them into a shared lib is wrong. then I want my Qt application be dynamic linked with this libQtMain.so by: QT += master so how to create this new QT module master that can be used from the .pro files ? This is also wrong, since this would require everyone to change the way they create Qt projects. In this case you would want QT += core gui network to do the same thing, simply to add linking to this new qt5.so library. That way you can keep projects working both with and without this magical single library without further adjustments. -- .marius ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Use static qt libraries
OK, based on my current understanding, do you mean that: I still need to build all of the current qt modules as static objects, which can be done by OPTS += -static or by other way ? Thanks, Song -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 10:35 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: RE: [Development] Use static qt libraries Importance: High No, you will need to link it all at once, since an .so is considered a final product. You might be able to mess around with a qt5-massive-library.pro, which include()s all the module .pro files you want in the final library. It's unknown how much tweaking you will need to achieve this final all-in-one module though. This is uncharted territory. (Btw, with GCC you _can_ do gcc -shared qt5.so -Wl,--whole-archive lib1.a lib2.a lib3.a -Wl,--no-whole-archive but I have no idea if the end result would be usable in Qt's case. I doubt it.) -- .marius -Original Message- From: Liu Song.7 (Nokia-MP/Beijing) Sent: Monday, July 23, 2012 9:16 AM To: Storm-Olsen Marius (Nokia-MP/Austin) Cc: development@qt-project.org Subject: RE: [Development] Use static qt libraries Thanks for help. Is there any tool to link all of the separate shared libraries into one single shared library (libqt5.so) ? Thanks, Song -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 10:12 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: Re: [Development] Use static qt libraries Importance: High On 23/07/2012 08:56, ext song.7@nokia.com wrote: Hi, To use the static qt libraries, now I can build out all the libQtCore.a , libQtGui.a , libQtWidgets.a etc with option -static. Also I can create a new shared object libQtMaster.so which is composed of all of above static objects (libQtXXX.a), This would be all wrong. The only reason for compiling several modules into one would be (of the top of my head) to 1) Get cross-module optimizations (which indicate also cross-compile-unit optimizations, so you'll need a bin tools chain which can do that) to a) reduce code size, and b) improve performance. 2) Reduce number of exported symbols. 3) Faster shared library load time. To do this you would have to compile each of the modules as normal (shared library), and then have a step which links all of the object files into one shared library, maybe called just qt5.so Configuring as static only to gather them into a shared lib is wrong. then I want my Qt application be dynamic linked with this libQtMain.so by: QT += master so how to create this new QT module master that can be used from the .pro files ? This is also wrong, since this would require everyone to change the way they create Qt projects. In this case you would want QT += core gui network to do the same thing, simply to add linking to this new qt5.so library. That way you can keep projects working both with and without this magical single library without further adjustments. -- .marius ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Use static qt libraries
then have a step which links all of the object files into one shared library, maybe called just qt5.so Or do you mean that I need create a qt5-massive-library.pro to gather all the needed object file (.obj) from each module instead of the static object (.a) of each module ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Monday, July 23, 2012 10:39 PM To: Storm-Olsen Marius (Nokia-MP/Austin) Cc: development@qt-project.org Subject: Re: [Development] Use static qt libraries OK, based on my current understanding, do you mean that: I still need to build all of the current qt modules as static objects, which can be done by OPTS += -static or by other way ? Thanks, Song -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 10:35 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: RE: [Development] Use static qt libraries Importance: High No, you will need to link it all at once, since an .so is considered a final product. You might be able to mess around with a qt5-massive-library.pro, which include()s all the module .pro files you want in the final library. It's unknown how much tweaking you will need to achieve this final all-in-one module though. This is uncharted territory. (Btw, with GCC you _can_ do gcc -shared qt5.so -Wl,--whole-archive lib1.a lib2.a lib3.a -Wl,--no-whole-archive but I have no idea if the end result would be usable in Qt's case. I doubt it.) -- .marius -Original Message- From: Liu Song.7 (Nokia-MP/Beijing) Sent: Monday, July 23, 2012 9:16 AM To: Storm-Olsen Marius (Nokia-MP/Austin) Cc: development@qt-project.org Subject: RE: [Development] Use static qt libraries Thanks for help. Is there any tool to link all of the separate shared libraries into one single shared library (libqt5.so) ? Thanks, Song -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 10:12 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: Re: [Development] Use static qt libraries Importance: High On 23/07/2012 08:56, ext song.7@nokia.com wrote: Hi, To use the static qt libraries, now I can build out all the libQtCore.a , libQtGui.a , libQtWidgets.a etc with option -static. Also I can create a new shared object libQtMaster.so which is composed of all of above static objects (libQtXXX.a), This would be all wrong. The only reason for compiling several modules into one would be (of the top of my head) to 1) Get cross-module optimizations (which indicate also cross-compile-unit optimizations, so you'll need a bin tools chain which can do that) to a) reduce code size, and b) improve performance. 2) Reduce number of exported symbols. 3) Faster shared library load time. To do this you would have to compile each of the modules as normal (shared library), and then have a step which links all of the object files into one shared library, maybe called just qt5.so Configuring as static only to gather them into a shared lib is wrong. then I want my Qt application be dynamic linked with this libQtMain.so by: QT += master so how to create this new QT module master that can be used from the .pro files ? This is also wrong, since this would require everyone to change the way they create Qt projects. In this case you would want QT += core gui network to do the same thing, simply to add linking to this new qt5.so library. That way you can keep projects working both with and without this magical single library without further adjustments. -- .marius ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Use static qt libraries
OK, this way should be easier and doable, thanks for your help ;) Thanks, Song -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 10:44 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: RE: [Development] Use static qt libraries Importance: High No, I mean you should create a new .pro file which includes all the module libs you want to include, and then later in that file do the tweaks needed to generate the required result. Just compiling this new project will be enough to produce the end result. So, a new qt5-massive-library.pro which does something like: include(../corelib/corelib.pro) include(../gui/gui.pro) include(../network/network.pro) include(../opengl/opengl.pro) TARGET = Qt5 MODULE = qt5-massive-library ...etc... -- .marius -Original Message- From: Liu Song.7 (Nokia-MP/Beijing) Sent: Monday, July 23, 2012 9:39 AM To: Storm-Olsen Marius (Nokia-MP/Austin) Cc: development@qt-project.org Subject: RE: [Development] Use static qt libraries OK, based on my current understanding, do you mean that: I still need to build all of the current qt modules as static objects, which can be done by OPTS += -static or by other way ? Thanks, Song -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 10:35 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: RE: [Development] Use static qt libraries Importance: High No, you will need to link it all at once, since an .so is considered a final product. You might be able to mess around with a qt5-massive-library.pro, which include()s all the module .pro files you want in the final library. It's unknown how much tweaking you will need to achieve this final all-in-one module though. This is uncharted territory. (Btw, with GCC you _can_ do gcc -shared qt5.so -Wl,--whole-archive lib1.a lib2.a lib3.a -Wl,--no-whole- archive but I have no idea if the end result would be usable in Qt's case. I doubt it.) -- .marius -Original Message- From: Liu Song.7 (Nokia-MP/Beijing) Sent: Monday, July 23, 2012 9:16 AM To: Storm-Olsen Marius (Nokia-MP/Austin) Cc: development@qt-project.org Subject: RE: [Development] Use static qt libraries Thanks for help. Is there any tool to link all of the separate shared libraries into one single shared library (libqt5.so) ? Thanks, Song -Original Message- From: Storm-Olsen Marius (Nokia-MP/Austin) Sent: Monday, July 23, 2012 10:12 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: Re: [Development] Use static qt libraries Importance: High On 23/07/2012 08:56, ext song.7@nokia.com wrote: Hi, To use the static qt libraries, now I can build out all the libQtCore.a , libQtGui.a , libQtWidgets.a etc with option -static. Also I can create a new shared object libQtMaster.so which is composed of all of above static objects (libQtXXX.a), This would be all wrong. The only reason for compiling several modules into one would be (of the top of my head) to 1) Get cross-module optimizations (which indicate also cross-compile- unit optimizations, so you'll need a bin tools chain which can do that) to a) reduce code size, and b) improve performance. 2) Reduce number of exported symbols. 3) Faster shared library load time. To do this you would have to compile each of the modules as normal (shared library), and then have a step which links all of the object files into one shared library, maybe called just qt5.so Configuring as static only to gather them into a shared lib is wrong. then I want my Qt application be dynamic linked with this libQtMain.so by: QT += master so how to create this new QT module master that can be used from the .pro files ? This is also wrong, since this would require everyone to change the way they create Qt projects. In this case you would want QT += core gui network to do the same thing, simply to add linking to this new qt5.so library. That way you can keep projects working both with and without this magical single library without further adjustments. -- .marius ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] 回复: Re: Use static qt libraries
To reduce the loading time. -原信息- 发件人: ext Thiago Macieira 发送: 2012/07/24, 02:09 收件人: development@qt-project.org 主题: Re: [Development] Use static qt libraries On segunda-feira, 23 de julho de 2012 14.39.16, song.7@nokia.com wrote: OK, based on my current understanding, do you mean that: I still need to build all of the current qt modules as static objects, which can be done by OPTS += -static or by other way ? No. What you need to do is figure out what you want to do in the first place. What is your objective? What are you trying to accomplish? And why is the current solution not enough? Don't tell us how you planned on implementing it. Forget libqt5.so. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Use static qt libraries
Hi, Now we can build out the single libqt5.so (using ARM toolchain) by: OPTS += -static to create the static qt libs ar -x libQtXX.a to extract the .o files armlink --fpic --shared *.o -o libqt5.so to generate final single so But the readelf -s libqt5.so | grep UND: 4: 0 OBJECT WEAK DEFAULT UND _ZTI12QFocusHelper 5: 0 OBJECT WEAK DEFAULT UND _ZTI17QAbstractUndoItem 6: 0 OBJECT WEAK DEFAULT UND _ZTI19QStaticTextUserData 7: 0 OBJECT WEAK DEFAULT UND _ZTI22QItemEditorCreatorB 8: 0 OBJECT WEAK DEFAULT UND _ZTI26QAbstractDynamicMet 9: 0 OBJECT WEAK DEFAULT UND _ZTI28QNetworkConfigurati Does anyone know what is this mangled symbol _ZTIXX in C++ ? Thanks, Song -Original Message- From: Lan Peng-Peter (Nokia-MP/Beijing) Sent: Tuesday, July 24, 2012 9:42 AM To: Storm-Olsen Marius (Nokia-MP/Austin); Liu Song.7 (Nokia-MP/Beijing); development@qt-project.org; thiago.macie...@intel.com Subject: RE: [Development] Use static qt libraries Importance: High I would like to explain the background of this approach. We are now porting Qt5 (selected modules) on a low profile device (ARM11@300MHz). All shared objects can XIP - so there is no need to load libs from ROM to RAM. But a major problem is the loading time of an application (qtbase examples) - it cost ~10-20 seconds to resolve the dependencies among the qt libraries. We believe if we can make a merged shared object, the performance would be greatly improved. By the way, the OS is a proprietary one... Thanks, Lan Peng -Original Message- From: development-bounces+peng-peter.lan=nokia@qt-project.org [mailto:development-bounces+peng-peter.lan=nokia@qt-project.org] On Behalf Of Storm-Olsen Marius (Nokia-MP/Austin) Sent: Tuesday, July 24, 2012 9:11 AM To: Liu Song.7 (Nokia-MP/Beijing); development@qt-project.org; thiago.macie...@intel.com Subject: Re: [Development] 回复: Re: Use static qt libraries I have my doubts about how much you'll really gain from that. This would only give you a large benefit if most applications requires all the libs you bundle together, and that you significantly reduce the total amount of symbols exported by the final shared library. I guess worth a quick try, but I wouldn't spend too much time on it. Most OSes will have pretty good caching of these libs anyways, and time is probably better spent optimizing the initialization of the applications rather than focusing on the time it takes to resolve library symbols. M2c. -- .marius -Original Message- From: development-bounces+marius.storm-olsen=nokia.com@qt- project.org [mailto:development-bounces+marius.storm- olsen=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia- MP/Beijing) Sent: Monday, July 23, 2012 6:06 PM To: development@qt-project.org; thiago.macie...@intel.com Subject: [Development] 回复: Re: Use static qt libraries To reduce the loading time. -原信息- 发件人: ext Thiago Macieira 发送: 2012/07/24, 02:09 收件人: development@qt-project.org 主题: Re: [Development] Use static qt libraries On segunda-feira, 23 de julho de 2012 14.39.16, song.7@nokia.com wrote: OK, based on my current understanding, do you mean that: I still need to build all of the current qt modules as static objects, which can be done by OPTS += -static or by other way ? No. What you need to do is figure out what you want to do in the first place. What is your objective? What are you trying to accomplish? And why is the current solution not enough? Don't tell us how you planned on implementing it. Forget libqt5.so. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Use static qt libraries
Thanks, are such undefined symbols normal ? And is there a way to fix it ? -Original Message- From: Mcgovern Rohan (Nokia-MP/Brisbane) Sent: Tuesday, July 24, 2012 11:58 AM To: Liu Song.7 (Nokia-MP/Beijing) Cc: Lan Peng-Peter (Nokia-MP/Beijing); Storm-Olsen Marius (Nokia-MP/Austin); development; thiago.macieira Subject: Re: [Development] Use static qt libraries Importance: High song.7@nokia.com said: Hi, Now we can build out the single libqt5.so (using ARM toolchain) by: OPTS += -static to create the static qt libs ar -x libQtXX.a to extract the .o files armlink --fpic --shared *.o -o libqt5.so to generate final single so But the readelf -s libqt5.so | grep UND: 4: 0 OBJECT WEAK DEFAULT UND _ZTI12QFocusHelper 5: 0 OBJECT WEAK DEFAULT UND _ZTI17QAbstractUndoItem 6: 0 OBJECT WEAK DEFAULT UND _ZTI19QStaticTextUserData 7: 0 OBJECT WEAK DEFAULT UND _ZTI22QItemEditorCreatorB 8: 0 OBJECT WEAK DEFAULT UND _ZTI26QAbstractDynamicMet 9: 0 OBJECT WEAK DEFAULT UND _ZTI28QNetworkConfigurati Does anyone know what is this mangled symbol _ZTIXX in C++ ? The 'c++filt' program can answer this. $ echo _ZTI12QFocusHelper | c++filt typeinfo for QFocusHelper ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] About finish signal in QHttpNetworkConnectionChannel
Hi, I am using the QNetworkAccessManager::get to request content from http://www.google.com. Then the QHttpNetworkConnectionChannel will be created and worked on another thread, when all the data is received, the QHttpNetworkConnectionChannel::allDone will be invoked, where: // queue the finished signal, this is required since we might send new requests from // slot connected to it. The socket will not fire readyRead signal, if we are already // in the slot connected to readyRead if (reply emitFinished) QMetaObject::invokeMethod(reply, finished, Qt::QueuedConnection); So this finished signal will be queued in the thread of QNetworkReplyHttpImpl until a new event will be handled. Finally, my application also won't receive any finished signal until for example: touch the screen to trigger the queued signal be handled. So why using the type Qt::QueuedConnection for this finished signal ? is there something wrong in my side ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] About finish signal in QHttpNetworkConnectionChannel
Hi, Thanks, and now the root cause is found, that the finished signal is posted to the main thread, and also it will try to wake up the main thread: void QEventDispatcherUNIX::wakeUp() { Q_D(QEventDispatcherUNIX); if (d-wakeUps.testAndSetAcquire(0, 1)) { char c = 0; qt_safe_write( d-thread_pipe[1], c, 1 ); } } But d-wakeUps.testAndSetAcquire(0, 1) returns zero, so eventually the main thread's event loop is not triggered. Can someone share what's the purpose of using testAndSetAcquire here ? Thanks, Song From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Markus Goetz Sent: Friday, July 20, 2012 3:32 AM To: development@qt-project.org Subject: Re: [Development] About finish signal in QHttpNetworkConnectionChannel On 19.07.12 17:55, song.7@nokia.commailto:song.7@nokia.com wrote: Hi, I am using the QNetworkAccessManager::get to request content from http://www.google.com. Then the QHttpNetworkConnectionChannel will be created and worked on another thread, when all the data is received, the QHttpNetworkConnectionChannel::allDone will be invoked, where: // queue the finished signal, this is required since we might send new requests from // slot connected to it. The socket will not fire readyRead signal, if we are already // in the slot connected to readyRead if (reply emitFinished) QMetaObject::invokeMethod(reply, finished, Qt::QueuedConnection); So this finished signal will be queued in the thread of QNetworkReplyHttpImpl until a new event will be handled. Finally, my application also won't receive any finished signal until for example: touch the screen to trigger the queued signal be handled. So why using the type Qt::QueuedConnection for this finished signal ? is there something wrong in my side ? The finished() communicated will be queued anyway nowadays since the inter-thread communication (from HTTP thread to your user thread) is happening via the event loop. Also it is not queued until a new event will be handled, it should flow to your user thread without further delay. I have no idea right now why your issue could happen = https://bugreports.qt-project.org bye, Markus ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] About finish signal in QHttpNetworkConnectionChannel
It seem I know that it is avoiding wake up again if it's already alive. And the wakeUps._q_value is 1 in my case, but this main thread actually is pending at doSelect, so I don't know why wakeUps is not zero ! From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Friday, July 20, 2012 10:27 AM To: mar...@woboq.com; development@qt-project.org Subject: Re: [Development] About finish signal in QHttpNetworkConnectionChannel Hi, Thanks, and now the root cause is found, that the finished signal is posted to the main thread, and also it will try to wake up the main thread: void QEventDispatcherUNIX::wakeUp() { Q_D(QEventDispatcherUNIX); if (d-wakeUps.testAndSetAcquire(0, 1)) { char c = 0; qt_safe_write( d-thread_pipe[1], c, 1 ); } } But d-wakeUps.testAndSetAcquire(0, 1) returns zero, so eventually the main thread's event loop is not triggered. Can someone share what's the purpose of using testAndSetAcquire here ? Thanks, Song From: development-bounces+song.7.liu=nokia@qt-project.orgmailto:development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org]mailto:[mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Markus Goetz Sent: Friday, July 20, 2012 3:32 AM To: development@qt-project.orgmailto:development@qt-project.org Subject: Re: [Development] About finish signal in QHttpNetworkConnectionChannel On 19.07.12 17:55, song.7@nokia.commailto:song.7@nokia.com wrote: Hi, I am using the QNetworkAccessManager::get to request content from http://www.google.com. Then the QHttpNetworkConnectionChannel will be created and worked on another thread, when all the data is received, the QHttpNetworkConnectionChannel::allDone will be invoked, where: // queue the finished signal, this is required since we might send new requests from // slot connected to it. The socket will not fire readyRead signal, if we are already // in the slot connected to readyRead if (reply emitFinished) QMetaObject::invokeMethod(reply, finished, Qt::QueuedConnection); So this finished signal will be queued in the thread of QNetworkReplyHttpImpl until a new event will be handled. Finally, my application also won't receive any finished signal until for example: touch the screen to trigger the queued signal be handled. So why using the type Qt::QueuedConnection for this finished signal ? is there something wrong in my side ? The finished() communicated will be queued anyway nowadays since the inter-thread communication (from HTTP thread to your user thread) is happening via the event loop. Also it is not queued until a new event will be handled, it should flow to your user thread without further delay. I have no idea right now why your issue could happen = https://bugreports.qt-project.org bye, Markus ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] About finish signal in QHttpNetworkConnectionChannel
OK, you can ignore this mail thread now, it's the thread_pipe not implemented in our porting ... thanks. From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Friday, July 20, 2012 10:48 AM To: mar...@woboq.com; development@qt-project.org Subject: Re: [Development] About finish signal in QHttpNetworkConnectionChannel It seem I know that it is avoiding wake up again if it's already alive. And the wakeUps._q_value is 1 in my case, but this main thread actually is pending at doSelect, so I don't know why wakeUps is not zero ! From: development-bounces+song.7.liu=nokia@qt-project.orgmailto:development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org]mailto:[mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of Liu Song.7 (Nokia-MP/Beijing) Sent: Friday, July 20, 2012 10:27 AM To: mar...@woboq.commailto:mar...@woboq.com; development@qt-project.orgmailto:development@qt-project.org Subject: Re: [Development] About finish signal in QHttpNetworkConnectionChannel Hi, Thanks, and now the root cause is found, that the finished signal is posted to the main thread, and also it will try to wake up the main thread: void QEventDispatcherUNIX::wakeUp() { Q_D(QEventDispatcherUNIX); if (d-wakeUps.testAndSetAcquire(0, 1)) { char c = 0; qt_safe_write( d-thread_pipe[1], c, 1 ); } } But d-wakeUps.testAndSetAcquire(0, 1) returns zero, so eventually the main thread's event loop is not triggered. Can someone share what's the purpose of using testAndSetAcquire here ? Thanks, Song From: development-bounces+song.7.liu=nokia@qt-project.orgmailto:development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org]mailto:[mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Markus Goetz Sent: Friday, July 20, 2012 3:32 AM To: development@qt-project.orgmailto:development@qt-project.org Subject: Re: [Development] About finish signal in QHttpNetworkConnectionChannel On 19.07.12 17:55, song.7@nokia.commailto:song.7@nokia.com wrote: Hi, I am using the QNetworkAccessManager::get to request content from http://www.google.com. Then the QHttpNetworkConnectionChannel will be created and worked on another thread, when all the data is received, the QHttpNetworkConnectionChannel::allDone will be invoked, where: // queue the finished signal, this is required since we might send new requests from // slot connected to it. The socket will not fire readyRead signal, if we are already // in the slot connected to readyRead if (reply emitFinished) QMetaObject::invokeMethod(reply, finished, Qt::QueuedConnection); So this finished signal will be queued in the thread of QNetworkReplyHttpImpl until a new event will be handled. Finally, my application also won't receive any finished signal until for example: touch the screen to trigger the queued signal be handled. So why using the type Qt::QueuedConnection for this finished signal ? is there something wrong in my side ? The finished() communicated will be queued anyway nowadays since the inter-thread communication (from HTTP thread to your user thread) is happening via the event loop. Also it is not queued until a new event will be handled, it should flow to your user thread without further delay. I have no idea right now why your issue could happen = https://bugreports.qt-project.org bye, Markus ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Qt Mobility in Qt5
Are the “Mobilities” in a signal .so or different .so ? From: ext Xizhi Zhu [mailto:xizhi@gmail.com] Sent: Saturday, June 16, 2012 2:44 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: Re: [Development] Qt Mobility in Qt5 Importance: High There's no longer Qt Mobility as such, but for different modules, you can find the docs here: http://qt-project.org/doc/qt-5.0/modules.html On Sat, Jun 16, 2012 at 9:42 AM, song.7@nokia.commailto:song.7@nokia.com wrote: Thanks, is there a documentation about Qt Mobility in Qt5 ? From: ext Xizhi Zhu [mailto:xizhi@gmail.commailto:xizhi@gmail.com] Sent: Saturday, June 16, 2012 2:41 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.orgmailto:development@qt-project.org Subject: Re: [Development] Qt Mobility in Qt5 Importance: High Yes, they have been modularized into different modules, e.g. QtPim, QtSystems, etc. All source code are available from gitorious. On Sat, Jun 16, 2012 at 9:39 AM, song.7@nokia.commailto:song.7@nokia.com wrote: Hi, Is the Qt Mobility a part of Qt5 ? If not, where can I get the source of latest Qt Mobility? Thanks, Song ___ Development mailing list Development@qt-project.orgmailto:Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development -- Blessings, Xizhi Zhu (Steven) -- Blessings, Xizhi Zhu (Steven) ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Qt Mobility in Qt5
Thanks… Also do you know how to configure and build the qtpim module along with qtbase ? Thanks, Song From: ext Xizhi Zhu [mailto:xizhi@gmail.com] Sent: Saturday, June 16, 2012 2:44 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: Re: [Development] Qt Mobility in Qt5 Importance: High There's no longer Qt Mobility as such, but for different modules, you can find the docs here: http://qt-project.org/doc/qt-5.0/modules.html On Sat, Jun 16, 2012 at 9:42 AM, song.7@nokia.commailto:song.7@nokia.com wrote: Thanks, is there a documentation about Qt Mobility in Qt5 ? From: ext Xizhi Zhu [mailto:xizhi@gmail.commailto:xizhi@gmail.com] Sent: Saturday, June 16, 2012 2:41 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.orgmailto:development@qt-project.org Subject: Re: [Development] Qt Mobility in Qt5 Importance: High Yes, they have been modularized into different modules, e.g. QtPim, QtSystems, etc. All source code are available from gitorious. On Sat, Jun 16, 2012 at 9:39 AM, song.7@nokia.commailto:song.7@nokia.com wrote: Hi, Is the Qt Mobility a part of Qt5 ? If not, where can I get the source of latest Qt Mobility? Thanks, Song ___ Development mailing list Development@qt-project.orgmailto:Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development -- Blessings, Xizhi Zhu (Steven) -- Blessings, Xizhi Zhu (Steven) ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] mkspec linux-arm-armcc for qt5
Thanks for sharing... Anyway, the armcc4.1 is still used for our project... and now theQtCore can be successfully build out, but I still have one C++ template related error in qtnetwork module as bellow: access/qnetworkrequest_p.h, line 94: Error: #2574: explicit specialization of class QTypeInfoQPairQByteArray, QByteArray must precede its first use (at line 105 of ../../include/QtCore/../../src/corelib/tools/qlist.h) Q_DECLARE_TYPEINFO(QNetworkHeadersPrivate::RawHeaderPair, Q_MOVABLE_TYPE); Code of qnetworkrequest_p.h: L1: class QNetworkHeadersPrivate L2: { L3: public: L4: typedef QPairQByteArray, QByteArray RawHeaderPair; L5: typedef QListRawHeaderPair RawHeadersList; L6: ... }; L94: Q_DECLARE_TYPEINFO(QNetworkHeadersPrivate::RawHeaderPair, Q_MOVABLE_TYPE); And the above code indicates that QListRawHeaderPair (L4) will firstly use the QTypeInfoRawHeaderPair, which is declared in last code L94. So it seems an error, but does anyone know how to fix it ? or how to ignore such error ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Monday, June 04, 2012 7:20 PM To: development@qt-project.org Subject: Re: [Development] mkspec linux-arm-armcc for qt5 On segunda-feira, 4 de junho de 2012 08.32.03, song.7@nokia.com wrote: Hi, We are trying to use armcc to build qt5, and meet many compiling issues... Here, I just want to confirm that is there some assumption / limitation in our qt5 code base about use armcc or gcc ??? I don't think anyone has compiler using that compiler for months or even years. It's completely untested. Here there be dragons. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] About pcre in qt5
Yes, we are creating a super minimal build with basic functionalities... But is there some feature depending on the REGEXP in case if it's disabled other features don't work then. Thanks, Song -Original Message- From: ext Giuseppe D'Angelo [mailto:dange...@gmail.com] Sent: Wednesday, June 06, 2012 4:34 PM To: Liu Song.7 (Nokia-MP/Beijing) Cc: development@qt-project.org Subject: Re: [Development] About pcre in qt5 Importance: High Hi, On 6 June 2012 02:42, song.7@nokia.com wrote: We are doing a customized build on qt5, but can I disable the pcre in qt5 ? it does not exactly work out of the box, but with little effort you should be able to define QT_NO_REGEXP (to avoid compiling QRegularExpression) and remove the PCRE inclusion from tools.pri... May I ask which kind of customized build are you doing and why you'd like to strip PCRE? Size? Or do you have a platform on which PCRE does not work? Cheers, -- Giuseppe D'Angelo ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] About pcre in qt5
Not sure about the PCRE, but now I am trying the regx disabling, if it's impossible or big efforts I will keep this feature in for my minimal-build. And also, we find that so many feature flags can't be easily disabled for example: QT_NO_DATASTREAM etc., as it seems many codes are not fully controlled on some feature flag. So is that caused as the Qt5 code refine ?? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Wednesday, June 06, 2012 5:17 PM To: development@qt-project.org Subject: Re: [Development] About pcre in qt5 On quarta-feira, 6 de junho de 2012 08.44.22, song.7@nokia.com wrote: Yes, we are creating a super minimal build with basic functionalities... But is there some feature depending on the REGEXP in case if it's disabled other features don't work then. There's probably nothing out there depending on QRegularExpression, but that may change at any time. Also note that there's no feature define for QRegularExpression, but only QT_NO_REGEXP which also disables QRegExp and that is used everywhere. Are you sure disabling PCRE support is the best use of your time, cost/benefit- wise? -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] One qmake problem for rvct
Hi, When using the armcc to compile qt5, there is one Makefile generation issue for widgets: You know the widgets is depending on platformsupport static library, but the libQtPlatformSupport.so is appended into LIBS flag within this Makefile. After checked with the source code of qmake/generators/unix/unixmake.cpp, where: bool UnixMakefileGenerator::findLibraries() ... ... else if (project-isActiveConfig(rvct_linker) || project-isActiveConfig(armcc_linker)) { (*it) = lib + opt.mid(2) + .so; } You will see that it treats all the dependency as a so without any checking. Then I am trying to modify here but can't find the current object indicated by current opt is static or shared... Anyone can help point out what's the correct way to fix this issue ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] One qmake problem for rvct
Hi, Same issue happened in platform plugins... Could someone share what's the idea to change qmake or something else ? Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Wednesday, June 06, 2012 11:44 PM To: development@qt-project.org Subject: Re: [Development] One qmake problem for rvct On quarta-feira, 6 de junho de 2012 14.38.46, song.7@nokia.com wrote: Hi, When using the armcc to compile qt5, there is one Makefile generation issue for widgets: You know the widgets is depending on platformsupport static library, but the libQtPlatformSupport.so is appended into LIBS flag within this Makefile. That is a mistake and needs to be fixed. QtWidgets cannot link to QtPlatformSupport (which, by the way, is a .a file, never a .so one). However, can you check if the platform plugins have the same issue? -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] About pcre in qt5
Hi, We are doing a customized build on qt5, but can I disable the pcre in qt5 ? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] mkspec linux-arm-armcc for qt5
Hi, We are trying to use armcc to build qt5, and meet many compiling issues... Here, I just want to confirm that is there some assumption / limitation in our qt5 code base about use armcc or gcc ??? Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] About the QtDir::currentPath
Hi, My QtDir::currentPath is /c_drive/ instead of C:/, so do someone know the reason behind ? And how can it be as C:/ ? Any information is appreciated ;) Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] [Interest] Warining about: Project WARNING: QtGui cannot have a QT of gui
But,,, I am building my Qt5 in Linux server. :( Thanks, Song From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Loaden Sent: Tuesday, May 22, 2012 5:31 PM To: Thiago Macieira Cc: development@qt-project.org Subject: Re: [Development] [Interest] Warining about: Project WARNING: QtGui cannot have a QT of gui It's only related with Windows. It's should be qmake's problem / issue. Hope to be fixed before the release coming. 2012/5/22 Thiago Macieira thiago.macie...@intel.commailto:thiago.macie...@intel.com I am building the Qt5, but could somebody point out what's the possible cause of: Project WARNING: QtGui cannot have a QT of gui -- Please don't ask where I come from, It's a shame! Best Regards Yuchen ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] How to let QtCore and QtGui etc. static linked against with one precompiled object
Hi, I want to let QtCore and QtGui etc. modules static linked against with one pre-compiled achieve object. So could someone help how to modify the qmake.conf under the related mkspecs folder ? Many thanks ;) Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] Source code path in the debug information
Hi, I am trying to copy libQtCore.so.5.0.0 to another different folder to debug with my application, but find that I can't step into the source code. After look into libQtCore, it seems that the path of source code is relative instead absolute, for example as bellow: ../../include/QtCore/../../src/corelib/tools/qstring.h: qstring.h6940x15013a So is there a way to use the absolute path to build out a debug version of libQtCore ? Or does anyone have some idea about this issue? Many thanks ;) Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
[Development] Link error about QtCore.dynlist
Hi, I am building the latest Qt5 on Linux, but with bellow link error in qtbase: /nokia/apps/tww/@sys/gcc442/x86_64-unknown-linux-gnu/bin/ld: /build/qt5-2/qtbase/src/corelib/QtCore.dynlist: file format not recognized; treating as linker script /nokia/apps/tww/@sys/gcc442/x86_64-unknown-linux-gnu/bin/ld:/build/qt5-2/qtbase/src/corelib/QtCore.dynlist:1: syntax error collect2: ld returned 1 exit status make[1]: *** [../../lib/libQtCore.so.5.0.0] Error 1 make[1]: Leaving directory `/build/qt5-2/qtbase/src/corelib' make: *** [sub-corelib-install_subtargets-ordered] Error 2 'cd qtbase make install failed: 512 Fatal failure installing qtbase at ./build line 455 Qt::Build::build_project('Qt::Build=HASH(0x2581930)', 'qtbase') called at ./build line 484 Qt::Build::build_qt('Qt::Build=HASH(0x2581930)') called at ./build line 544 Qt::Build::run('Qt::Build=HASH(0x2581930)') called at ./build line 553 The content of file QtCore.dynlist is: { extern C { qt_startup_hook; qt_addObject; qt_removeObject; }; extern C++ { QEventLoop::exec(QFlagsQEventLoop::ProcessEventsFlag); }; }; Does anyone have some idea ? thanks ;) Thanks, Song ___ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development
Re: [Development] Link error about QtCore.dynlist
Hi, Thanks for your reply, please get the error info from attached file. Thanks, Song -Original Message- From: development-bounces+song.7.liu=nokia@qt-project.org [mailto:development-bounces+song.7.liu=nokia@qt-project.org] On Behalf Of ext Thiago Macieira Sent: Monday, May 14, 2012 11:36 PM To: development@qt-project.org Subject: Re: [Development] Link error about QtCore.dynlist On segunda-feira, 14 de maio de 2012 14.58.33, song.7@nokia.com wrote: /nokia/apps/tww/@sys/gcc442/x86_64-unknown-linux-gnu/bin/ld: /build/qt5-2/qtbase/src/corelib/QtCore.dynlist: file format not recognized; treating as linker script /nokia/apps/tww/@sys/gcc442/x86_64-unknown-linux-gnu/bin/ld:/build/qt5 -2/qt base/src/corelib/QtCore.dynlist:1: syntax error collect2: ld returned 1 exit status [snip] Does anyone have some idea ? thanks Please paste the full linker command-line, which make printed before the first line you pasted here. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden rm -f libQtCore.so.5.0.0 libQtCore.so libQtCore.so.5 libQtCore.so.5.0 g++ -Wl,-rpath-link,/build/qt5-2/qtbase/lib -m32 -shared -shared /build/qt5-2/qtbase/src/corelib/QtCore.dynlist -Wl,-soname,libQtCore.so.5 -o libQtCore.so.5.0.0 .obj/debug-shared/qabstractanimation.o .obj/debug-shared/qvariantanimation.o .obj/debug-shared/qpropertyanimation.o .obj/debug-shared/qanimationgroup.o .obj/debug-shared/qsequentialanimationgroup.o .obj/debug-shared/qparallelanimationgroup.o .obj/debug-shared/qpauseanimation.o .obj/debug-shared/qatomic_unix.o .obj/debug-shared/qglobal.o .obj/debug-shared/qlibraryinfo.o .obj/debug-shared/qmalloc.o .obj/debug-shared/qnumeric.o .obj/debug-shared/qlogging.o .obj/debug-shared/qatomic.o .obj/debug-shared/qmutex.o .obj/debug-shared/qreadwritelock.o .obj/debug-shared/qrunnable.o .obj/debug-shared/qmutexpool.o .obj/debug-shared/qsemaphore.o .obj/debug-shared/qthread.o .obj/debug-shared/qthreadpool.o .obj/debug-shared/qthreadstorage.o .obj/debug-shared/qthread_unix.o .obj/debug-shared/qwaitcondition_unix.o .obj/debug-shared/qmutex_unix.o .obj/debug-shared/qarraydata.o .obj/debug-shared/qbitarray.o .obj/debug-shared/qbytearray.o .obj/debug-shared/qbytearraymatcher.o .obj/debug-shared/qcryptographichash.o .obj/debug-shared/qdatetime.o .obj/debug-shared/qeasingcurve.o .obj/debug-shared/qelapsedtimer.o .obj/debug-shared/qfreelist.o .obj/debug-shared/qhash.o .obj/debug-shared/qline.o .obj/debug-shared/qlinkedlist.o .obj/debug-shared/qlist.o .obj/debug-shared/qlocale.o .obj/debug-shared/qlocale_tools.o .obj/debug-shared/qpoint.o .obj/debug-shared/qmap.o .obj/debug-shared/qmargins.o .obj/debug-shared/qcontiguouscache.o .obj/debug-shared/qrect.o .obj/debug-shared/qregexp.o .obj/debug-shared/qregularexpression.o .obj/debug-shared/qrefcount.o .obj/debug-shared/qshareddata.o .obj/debug-shared/qsharedpointer.o .obj/debug-shared/qsimd.o .obj/debug-shared/qsize.o .obj/debug-shared/qstring.o .obj/debug-shared/qstringbuilder.o .obj/debug-shared/qstringlist.o .obj/debug-shared/qtextboundaryfinder.o .obj/debug-shared/qtimeline.o .obj/debug-shared/qunicodetools.o .obj/debug-shared/qvector.o .obj/debug-shared/qvsnprintf.o .obj/debug-shared/qelapsedtimer_unix.o .obj/debug-shared/qlocale_unix.o .obj/debug-shared/adler32.o .obj/debug-shared/compress.o .obj/debug-shared/crc32.o .obj/debug-shared/deflate.o .obj/debug-shared/gzclose.o .obj/debug-shared/gzlib.o .obj/debug-shared/gzread.o .obj/debug-shared/gzwrite.o .obj/debug-shared/infback.o .obj/debug-shared/inffast.o .obj/debug-shared/inflate.o .obj/debug-shared/inftrees.o .obj/debug-shared/trees.o .obj/debug-shared/uncompr.o .obj/debug-shared/zutil.o .obj/debug-shared/pcre16_byte_order.o .obj/debug-shared/pcre16_chartables.o .obj/debug-shared/pcre16_compile.o .obj/debug-shared/pcre16_config.o .obj/debug-shared/pcre16_dfa_exec.o .obj/debug-shared/pcre16_exec.o .obj/debug-shared/pcre16_fullinfo.o .obj/debug-shared/pcre16_get.o .obj/debug-shared/pcre16_globals.o .obj/debug-shared/pcre16_jit_compile.o .obj/debug-shared/pcre16_maketables.o .obj/debug-shared/pcre16_newline.o .obj/debug-shared/pcre16_ord2utf16.o .obj/debug-shared/pcre16_refcount.o .obj/debug-shared/pcre16_string_utils.o .obj/debug-shared/pcre16_study.o .obj/debug-shared/pcre16_tables.o .obj/debug-shared/pcre16_ucd.o .obj/debug-shared/pcre16_utf16_utils.o .obj/debug-shared/pcre16_valid_utf16.o .obj/debug-shared/pcre16_version.o .obj/debug-shared/pcre16_xclass.o .obj/debug-shared/harfbuzz-buffer.o .obj/debug-shared/harfbuzz-gdef.o .obj/debug-shared/harfbuzz-gsub.o .obj/debug-shared/harfbuzz-gpos.o .obj/debug-shared/harfbuzz-impl.o .obj/debug-shared/harfbuzz-open.o .obj/debug-shared/harfbuzz-stream.o .obj/debug-shared/harfbuzz-shaper-all.o .obj/debug-shared/qharfbuzz.o .obj/debug