We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Dear Community,
currently I am trying to cross compile an OPC UA Server Project with Qt Creator 5.15.2 on Raspberry Pi 4B Model.
For the cross compilation, I used the following installation guide: https://wapel.de/?p=842
My source code is based on the official waterpump example: https://doc.qt.io/QtOPCUA/qtopcua-waterpump-waterpump-qmlcpp-example.html
My exact problem is: The Relaese-Version of the Server does not deploy on the Raspberry Pi correctly.
After building the software, I get following error code within the error log window
/tmp/ccF0J1PW.s:-1: Error: Assembler messages:
The compiler log window shows this error description:
/tmp/ccF0J1PW.s: Assembler messages: /tmp/ccF0J1PW.s:4206: IT blocks containing 32-bit Thumb instructions are deprecated in ARMv8 /tmp/ccF0J1PW.s:13562: IT blocks containing 32-bit Thumb instructions are deprecated in ARMv8 /tmp/ccF0J1PW.s:71648: IT blocks containing 32-bit Thumb instructions are deprecated in ARMv8
After running the Application with the error, I got the following Output in the Application Window:
Could not initialize server. double free or corruption (fasttop)
My Qt-Development-Kit for Cross Compiling is using the following Compiler-Combination:
C++ Compiler: gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf-g++
Is there anyone who had the same problem? I would be glad to get any tips, how to solve this.
By the way: I posted the same thread within the Qt Forum, but I didn`t got an answer ;)
https://forum.qt.io/topic/123832/qt-opcua-server-deployment-error
Thank you in Advance!
The first and possible workaround is: to check your GCC compiler options to remove the "-Werror“ ( warning will be taken as an error )。
The second solution is to modify the source file of "/tmp/ccF0J1PW.s" to remove the 32-bit Thumb instructions in the IT blocks.
-mrestrict-it
Restricts generation of IT blocks to conform to the rules of ARMv8-A. IT blocks can only contain a single 16-bit instruction from a select set of instructions. This option is on by default for ARMv8-A Thumb mode.
See https://community.arm.com/developer/ip-products/processors/f/cortex-m-forum/7299/warning-it-blocks-containing-32-bit-thumb-instructions-are-deprecated-in-armv8-with-gcc-4-9 for more details.