Build error in release mode (Android/Armv4/GCC4.9/Qt5.7.0) but not in debug...



  • Hi dear GCC/Qt/Android experts.

    I need some help on a very strange problem which I don't understand.

    I have create an Android application base on Qt 5.7.0. This application uses some libraries I'm already using for other projects based on Qt 5.4 (Windows XP/7 and Linux x86/ARM4).

    But one of those libraries won't build as "Release" on Android but build in "Debug"!

    My build configuration is following:

    • Build machine is using Windows 7 Pro/64 bit
    • Qt Creator 4.1.0
    • Android NDK r12 (I've also tested r13b and r14Beta1) 32 bit
    • Android SDK Tools 25.2.4
    • Qt 5.7.0 for Android armv7

    The error I've got is as following:

    C:\Android\android-ndk-r14-beta1/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-g++ -c -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove -std=c++11 -O2 -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -mthumb -Wall -Wno-psabi -W -D_REENTRANT -fPIC -DAPP_VERSION=\"3.09.101.00000\" -DGCCOMLIB_LIBRARY -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_SQL_LIB -DQT_CORE_LIB -I..\..\..\..\GCComLib\trunk\GCComLib -I. -I..\..\..\..\GCComLib\trunk -I..\..\..\..\StdLib\trunk\StdLib -IC:\Qt\5.7\android_armv7\include -IC:\Qt\5.7\android_armv7\include\QtNetwork -IC:\Qt\5.7\android_armv7\include\QtSql -IC:\Qt\5.7\android_armv7\include\QtCore -I. -isystem C:\Android\android-ndk-r14-beta1\sources\cxx-stl\gnu-libstdc++\4.9\include -isystem C:\Android\android-ndk-r14-beta1\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a\include -isystem C:\Android\android-ndk-r14-beta1\platforms\android-9\arch-arm\usr\include -IC:\Qt\5.7\android_armv7\mkspecs\android-g++ -o GCDatagram.obj ..\..\..\..\GCComLib\trunk\GCComLib\UDP\GCDatagram.cpp
    In file included from C:\Qt\5.7\android_armv7\include/QtCore/QtCore:13:0,
                     from C:\Qt\5.7\android_armv7\include/QtSql/QtSqlDepends:3,
                     from C:\Qt\5.7\android_armv7\include/QtSql/QtSql:3,
                     from ..\..\..\..\StdLib\trunk\StdLib/DataType/GCDataType.h:6,
                     from ..\..\..\..\GCComLib\trunk\GCComLib/Messages/MessageBase.h:8,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\UDP\GCDatagram.h:6,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\UDP\GCDatagram.cpp:1:
    C:\Qt\5.7\android_armv7\include/QtCore/qendian.h:53:0: warning: "QT_HAS_BUILTIN" redefined
     #  define QT_HAS_BUILTIN(x)     __has_builtin(x)
     ^
    In file included from C:\Qt\5.7\android_armv7\include/QtCore/qglobal.h:83:0,
                     from ..\..\..\..\GCComLib\trunk\GCComLib/GCComLibGlobal.h:4,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\UDP\GCDatagram.h:4,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\UDP\GCDatagram.cpp:1:
    C:\Qt\5.7\android_armv7\include/QtCore/qcompilerdetection.h:1209:0: note: this is the location of the previous definition
     #  define QT_HAS_BUILTIN(x)             0
     ^
    C:\Android\android-ndk-r14-beta1/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-g++ -c -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove -std=c++11 -O2 -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -mthumb -Wall -Wno-psabi -W -D_REENTRANT -fPIC -DAPP_VERSION=\"3.09.101.00000\" -DGCCOMLIB_LIBRARY -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_SQL_LIB -DQT_CORE_LIB -I..\..\..\..\GCComLib\trunk\GCComLib -I. -I..\..\..\..\GCComLib\trunk -I..\..\..\..\StdLib\trunk\StdLib -IC:\Qt\5.7\android_armv7\include -IC:\Qt\5.7\android_armv7\include\QtNetwork -IC:\Qt\5.7\android_armv7\include\QtSql -IC:\Qt\5.7\android_armv7\include\QtCore -I. -isystem C:\Android\android-ndk-r14-beta1\sources\cxx-stl\gnu-libstdc++\4.9\include -isystem C:\Android\android-ndk-r14-beta1\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a\include -isystem C:\Android\android-ndk-r14-beta1\platforms\android-9\arch-arm\usr\include -IC:\Qt\5.7\android_armv7\mkspecs\android-g++ -o GCComHandler.obj ..\..\..\..\GCComLib\trunk\GCComLib\Client\GCComHandler.cpp
    In file included from C:\Qt\5.7\android_armv7\include/QtCore/QtCore:13:0,
                     from C:\Qt\5.7\android_armv7\include/QtSql/QtSqlDepends:3,
                     from C:\Qt\5.7\android_armv7\include/QtSql/QtSql:3,
                     from ..\..\..\..\StdLib\trunk\StdLib/DataType/GCDataType.h:6,
                     from ..\..\..\..\GCComLib\trunk\GCComLib/Messages/MessageBase.h:8,
                     from ..\..\..\..\GCComLib\trunk\GCComLib/UDP/GCDatagram.h:6,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\Client\GCUdpSocket.h:11,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\Client\GCComHandler.h:14,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\Client\GCComHandler.cpp:1:
    C:\Qt\5.7\android_armv7\include/QtCore/qendian.h:53:0: warning: "QT_HAS_BUILTIN" redefined
     #  define QT_HAS_BUILTIN(x)     __has_builtin(x)
     ^
    In file included from C:\Qt\5.7\android_armv7\include/QtCore/qglobal.h:83:0,
                     from C:\Qt\5.7\android_armv7\include/QtCore/qiodevice.h:43,
                     from C:\Qt\5.7\android_armv7\include/QtNetwork/qabstractsocket.h:43,
                     from C:\Qt\5.7\android_armv7\include\QtNetwork/qudpsocket.h:43,
                     from C:\Qt\5.7\android_armv7\include\QtNetwork/QUdpSocket:1,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\Client\GCComHandler.h:4,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\Client\GCComHandler.cpp:1:
    C:\Qt\5.7\android_armv7\include/QtCore/qcompilerdetection.h:1209:0: note: this is the location of the previous definition
     #  define QT_HAS_BUILTIN(x)             0
     ^
    In file included from C:\Android\android-ndk-r14-beta1\sources\cxx-stl\gnu-libstdc++\4.9\include/atomic:41:0,
                     from C:\Qt\5.7\android_armv7\include/QtCore/qatomic_cxx11.h:45,
                     from C:\Qt\5.7\android_armv7\include/QtCore/qbasicatomic.h:53,
                     from C:\Qt\5.7\android_armv7\include/QtCore/qatomic.h:46,
                     from C:\Qt\5.7\android_armv7\include/QtCore/qglobal.h:1145,
                     from C:\Qt\5.7\android_armv7\include/QtCore/qiodevice.h:43,
                     from C:\Qt\5.7\android_armv7\include/QtNetwork/qabstractsocket.h:43,
                     from C:\Qt\5.7\android_armv7\include\QtNetwork/qudpsocket.h:43,
                     from C:\Qt\5.7\android_armv7\include\QtNetwork/QUdpSocket:1,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\Client\GCComHandler.h:4,
                     from ..\..\..\..\GCComLib\trunk\GCComLib\Client\GCComHandler.cpp:1:
    C:\Android\android-ndk-r14-beta1\sources\cxx-stl\gnu-libstdc++\4.9\include/bits/atomic_base.h: In member function 'void Geocept::GCComLib::Client::GCComHandler::processIncomingMsg(Geocept::GCComLib::Messages::MessageBasePtr)':
    C:\Android\android-ndk-r14-beta1\sources\cxx-stl\gnu-libstdc++\4.9\include/bits/atomic_base.h:584:70: error: failure memory model cannot be stronger than success memory model for '__atomic_compare_exchange'
      return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
    

    Additionnal information
    ==> MessageBasePtr is as typedef of QSharedPointer<MessageBase>
    MessageBase is a virtual class used as base class for message handling.

    I don't understand what this does mean failure memory model cannot be stronger than success memory model for '__atomic_compare_exchange'

    And why this build fine in Debug mode?!?


  • Moderators

    @KroMignon
    it seems this is only an issue with gcc 4.x version's optimization.
    It should work with gcc 5.x
    Especially with the -Os flag in release mode.

    See this.



  • @raven-worx : thanks for your quick answer, but GCC comes with Android SDK... so I don't have any chance to change GCC version.

    How can I remove this -Os flag in my project file (PRO format)?



  • @raven-worx : Thanks a lot for pointing out the problem.

    In fact, it was the -Os optimization from GCC 4.9, I've turn it off for Android in my PRO file with following command:

    android: QMAKE_CXXFLAGS_RELEASE -= -Os
    

    Now I can build my library in release mode :)
    Perhaps this could help someone else.

    Have a nice day.


  • Moderators

    @KroMignon
    you can try the following:

    QMAKE_CXXFLAGS_RELEASE -= -Os
    QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO -= -Os
    

    Maybe add an other optimization flag as desired.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.