libQt5Core.so: undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8'
-
Hello guys,
I'm using a cross compiled qt 5.4.2 and I getting the following error when I try to build simple QtWidget app (the app is just a window)
09:55:42: Running steps for project untitled... 09:55:42: Configuration unchanged, skipping qmake step. 09:55:42: Starting: "/usr/bin/make" g++ --sysroot=/home/pf/ssdk-d6cx/host/usr/x86_64-buildroot-linux-gnu/sysroot -Wl,-O1 -Wl,-rpath,/usr/local/qt5.4-d6cx/lib -o untitled main.o mainwindow.o moc_mainwindow.o -L/home/pf/ssdk-d6cx/host/usr/x86_64-buildroot-linux-gnu/sysroot/usr/local/qt5.4-d6cx/lib -lQt5Widgets -L/home/pf/ssdk-d6cx/host/usr/x86_64-buildroot-linux-gnu/sysroot/lib64 -L/usr/local/qt5.4-d6cx/lib -lQt5Gui -lQt5Core -lGLESv2 -lpthread /home/pf/ssdk-d6cx/host/usr/x86_64-buildroot-linux-gnu/sysroot/usr/local/qt5.4-d6cx/lib/libQt5Core.so: undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8' collect2: ld returned 1 exit status make: *** [untitled] Error 1 09:55:42: The process "/usr/bin/make" exited with code 2. Error while building/deploying project untitled (kit: d6cx) When executing step "Make" 09:55:42: Elapsed time: 00:00.
I really don't understand what is going on.
Could be a compatibility problem with some libs on the target OS?
I will appreciate any help that point me to the solution.
Thanks in advance.
-
@maikelo
Hello,
I don't see the standard C++ library linked on the linker step. Try adding -lstdc++, although this should've been done by qmake. Are you doing something "strange" with the project file? Are you using the cross compiled qmake?Kind regards.
-
@maikelo
Hello,
I don't see the standard C++ library linked on the linker step. Try adding -lstdc++, although this should've been done by qmake. Are you doing something "strange" with the project file? Are you using the cross compiled qmake?Kind regards.
@kshegunov thanks for your response. I'm not touching the project file. I just create a QtWidget App with a window and I'm trying to build it.
Regarding qmake, yes I'm using a cross compiled qmake. When I run just qmake I got this output:
11:09:39: Running steps for project untitled... 11:09:39: Starting: "/usr/local/qt5.4-d6cx/bin/qmake" '/home/pf/D6Cx/test app/untitled/untitled.pro' -r -spec linux-g++ 11:09:39: The process "/usr/local/qt5.4-d6cx/bin/qmake" exited normally. 11:09:39: Elapsed time: 00:00.
Regarding to add -lstdc++, how should I do that?
Thanks again!!
-
@kshegunov thanks for your response. I'm not touching the project file. I just create a QtWidget App with a window and I'm trying to build it.
Regarding qmake, yes I'm using a cross compiled qmake. When I run just qmake I got this output:
11:09:39: Running steps for project untitled... 11:09:39: Starting: "/usr/local/qt5.4-d6cx/bin/qmake" '/home/pf/D6Cx/test app/untitled/untitled.pro' -r -spec linux-g++ 11:09:39: The process "/usr/local/qt5.4-d6cx/bin/qmake" exited normally. 11:09:39: Elapsed time: 00:00.
Regarding to add -lstdc++, how should I do that?
Thanks again!!
@maikelo
Hello,
You could add in your project file:LIBS += -lstdc++
But(!) take note that all this much depends on the target device and what it provides. You may need instead to compile everything without exception support (Qt included), if your device in fact can't handle those.
Kind regards.
-
@maikelo
Hello,
You could add in your project file:LIBS += -lstdc++
But(!) take note that all this much depends on the target device and what it provides. You may need instead to compile everything without exception support (Qt included), if your device in fact can't handle those.
Kind regards.
@kshegunov I add -lstdc++ and continue the same error. I checked and the target OS has that lib. Also the Qt Framework I'm using was built for the target OS.
I don't know if it is relevant but I already realize that when qmake run it use the following sequence:
qmake '/home/pf/D6Cx/test app/untitled/untitled.pro' -r -spec linux-g++
I mean, it is using -spec linux-g++ but when I built Qt I specified that the target device is linux-d6cx-g++, so my doubt is: should qmake use -spec linux-g++ or -spec linux-d6cx-g++ ?
Thanks,
-
I found the solution to the problem.
The real problem was that I was using Qt Creator as IDE to cross compile and it set qmake to use a device different that the one I was cross compiling for.
I mean the original setting for qmake was:
qmake '/home/pf/D6Cx/test app/untitled/untitled.pro' -r -spec linux-g++
and it should be:
qmake '/home/pf/D6Cx/test app/untitled/untitled.pro' -r -spec devices/linux-d6cx-g++
whith this last one configuration the app is built correctly!!
The way I use to force qmake to use my specific device was (in Qt Creator):
- go to Projects/Build setting
- in the section Build Steps -> qmake add in Additional arguments:
-spec devices/linux-d6cx-g++
and that will overwrite the original setting for -spec
Thanks!
-
@kshegunov I add -lstdc++ and continue the same error. I checked and the target OS has that lib. Also the Qt Framework I'm using was built for the target OS.
I don't know if it is relevant but I already realize that when qmake run it use the following sequence:
qmake '/home/pf/D6Cx/test app/untitled/untitled.pro' -r -spec linux-g++
I mean, it is using -spec linux-g++ but when I built Qt I specified that the target device is linux-d6cx-g++, so my doubt is: should qmake use -spec linux-g++ or -spec linux-d6cx-g++ ?
Thanks,
I mean, it is using -spec linux-g++ but when I built Qt I specified that the target device is linux-d6cx-g++, so my doubt is: should qmake use -spec linux-g++ or -spec linux-d6cx-g++ ?
I would think so, yes.
EDIT:
You seem to have found the solution on your own before my view updated, so the above comment is pretty useless. Anyway, good luck!