QuasarApp / CQtDeployer

This project is used to deploy applications written using QML, qt or other С / С++ frameworks.
https://quasarapp.ddns.net:3031/docs/QuasarApp/CQtDeployer/latest/
GNU Lesser General Public License v3.0
570 stars 89 forks source link

Illegal instruction (core dumped) #778

Closed sonphambk closed 3 months ago

sonphambk commented 10 months ago

Hi, I have an issue on ubuntu 22.04 When I deployed my qt app to run file and install it in container, it works fine. But when I integrate ddeploy app into bitbucket pipeline with the same image I used in my local, then I installed it in another pc with ubuntu 22.04, it cause this error: image with ubuntu 20, it works fine.

EndrII commented 10 months ago

@sonphambk Hm, probably issue with system libs... run your app with valgrind verbose options and send me output to analyze.

sudo apt install valgrind

Change the start script of your installed distribution

"$BASE_DIR/bin/yourAppExecutable" "$@" 

to

valgrind --verbose --log-file="$BASE_DIR/valgrindVetbose.log" "$BASE_DIR/bin/yourAppExecutable" "$@" 
sonphambk commented 10 months ago

Thank you for quick response This is my log file valgrindVetbose.log

sonphambk commented 10 months ago

My wonder is that when I built source and make deploy in docker container ubuntu 22 and then installed run file, it worked fine

EndrII commented 10 months ago

Not sure, but probably you have a deficient version of the boost libraries.

==16820== Process terminating with default action of signal 4 (SIGILL): dumping core
==16820==  Illegal opcode at address 0x1ABA98
==16820==    at 0x1ABA98: boost::io::basic_altstringbuf<char, std::char_traits<char>, std::allocator<char> >::overflow(int) (in /root/robomap_desktop/bin/robomap_desktop)
==16820==    by 0x9B1788A: std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30)
==16820==    by 0x9B09B64: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30)
==16820==    by 0x1B7E6F: void boost::io::detail::put<char, std::char_traits<char>, std::allocator<char>, boost::io::detail::put_holder<char, std::char_traits<char> > const&>(boost::io::detail::put_holder<char, std::char_traits<char> > const&, boost::io::detail::format_item<char, std::char_traits<char>, std::allocator<char> > const&, boost::basic_format<char, std::char_traits<char>, std::allocator<char> >::string_type&, boost::basic_format<char, std::char_traits<char>, std::allocator<char> >::internal_streambuf_t&, std::locale*) (in /root/robomap_desktop/bin/robomap_desktop)
==16820==    by 0x1B8ACF: void boost::io::detail::distribute<char, std::char_traits<char>, std::allocator<char>, boost::io::detail::put_holder<char, std::char_traits<char> > const&>(boost::basic_format<char, std::char_traits<char>, std::allocator<char> >&, boost::io::detail::put_holder<char, std::char_traits<char> > const&) (in /root/robomap_desktop/bin/robomap_desktop)
==16820==    by 0x23B71A: boost::basic_format<char, std::char_traits<char>, std::allocator<char> >& boost::io::detail::feed_impl<char, std::char_traits<char>, std::allocator<char>, boost::io::detail::put_holder<char, std::char_traits<char> > const&>(boost::basic_format<char, std::char_traits<char>, std::allocator<char> >&, boost::io::detail::put_holder<char, std::char_traits<char> > const&) [clone .constprop.0] (in /root/robomap_desktop/bin/robomap_desktop)
==16820==    by 0x23C0A5: hdl_graph_slam::InteractiveGraph::load_keyframes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, ProgressDialog*) (in /root/robomap_desktop/bin/robomap_desktop)
==16820==    by 0x24310A: QtConcurrent::RunFunctionTaskBase<bool>::run() (in /root/robomap_desktop/bin/robomap_desktop)
==16820==    by 0x606320B: ??? (in /opt/Qt/6.5.2/gcc_64/lib/libQt6Core.so.6.5.2)
==16820==    by 0x605E28E: ??? (in /opt/Qt/6.5.2/gcc_64/lib/libQt6Core.so.6.5.2)
==16820==    by 0x9DE0AC2: start_thread (pthread_create.c:442)
==16820==    by 0x9E71BF3: clone (clone.S:100)

Try to deploy your "boosts" libs with your distribution

use the -extraLibs option

cqteployer ... -extraLibs boost
sonphambk commented 10 months ago

This is my command:

cqtdeployer qif -bin ./robomap_desktop -targetDir /home/user/deploy -verbose 3 -libDir /usr/local/lib,/opt/Qt/6.5.2/gcc_64/lib,/usr/lib/x86_64-linux-gnu,/usr/lib/x86_64-linux-gnu/lapack,/usr/lib/ -platform linux_x86_64 -qmake /opt/Qt/6.5.2/gcc_64/bin/qmake -icon ./appIcon.png -extraLibs boost

but it doesn't work

EndrII commented 10 months ago

I think issue on your deployment command.

You are added to deploy all libs of your usr/lib dir. This Dir contains all libraries of your OS Distribution. But not all libraries has computability with another OS systems. So, just remove the /usr/local/lib, /usr/lib/x86_64-linux-gnu, /usr/lib from your libDir option.

If some libs do not add into your distribution after remove these paths, just add mask of name these libs into extraLib option.

Different between extraLib and libDir:

cqtdeployer qif -bin ./robomap_desktop -targetDir /home/user/deploy -verbose 3 -libDir /usr/lib/x86_64-linux-gnu/lapack -platform linux_x86_64 -qmake /opt/Qt/6.5.2/gcc_64/bin/qmake -icon ./appIcon.png -extraLibs boost
sonphambk commented 10 months ago

Thank you for your info I tried but it still failed. I tried to deploy in docker container and copied from container to another host (ubuntu 22) and it worked fine. However, the deployed file from bitbucket pipeline didn't work. The deployed file from pipeline saved in Download of repo

EndrII commented 10 months ago

@sonphambk please attach verbose deploy log to this issue. (from bitbucket pipeline)

sonphambk commented 10 months ago

Hi @EndrII This is my log pipelineLog-{98068883-b28c-4144-a8f3-a014cbe52f03}.txt

And this is the log file from docker container: deploy.log I didn't see any different thing from both.

EndrII commented 10 months ago

@sonphambk I check your log, I see that you use the libDir option, please disable it,

Verbose log: Option[libDir]: /usr/local/lib,/opt/Qt/6.5.2/gcc_64/lib,/usr/lib/x86_64-linux-gnu,/usr/lib/

Because cqtdeployer deploy unwanted libraries like :

Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/librt.so.1
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libdbus-1.so.3
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libsystemd.so.0
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libcap.so.2
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libzstd.so.1
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/liblz4.so.1
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/liblzma.so.5
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libgcrypt.so.20
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libgpg-error.so.0
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libGL.so.1
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libGLX.so.0
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libX11.so.6
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libxcb.so.1
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libXau.so.6
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libXdmcp.so.6
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libbsd.so.0
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libmd.so.0
Verbose log: Get the recursive dependencies of /usr/lib/x86_64-linux-gnu/libEGL.so.1

All these libs are system, and should distribute in your OS only. If you need some libraries, use the ExtraLibs option.

sonphambk commented 10 months ago

@EndrII After removing libDir option, it still doesn't work I used gdb to debug and seem the error from Qt lib image

sonphambk commented 10 months ago

This is cpu on bitbucket pipeline image And this is my cpu image

EndrII commented 10 months ago

@EndrII After removing libDir option, it still doesn't work I used gdb to debug and seem the error from Qt lib image

What is Pose Graph Editor ? Looks as you forget to add this library into distribution

cqtdeploy deploy all known dependencies except system libs. Because system libs more likely are not backward compatible between major versions

Using libDir option you are forced to deploy all system libs into your Distribution kit, more likely it was broken your app.

sonphambk commented 10 months ago

@EndrII

What is Pose Graph Editor ?

This is my own class inherited from QOpenGLWidget.

You mean I should add Qt's lib to extraLibs option instead of add them to libDir

EndrII commented 3 months ago

@sonphambk sorry to delay answer, but your case looks as too complicated to fix it remotely. So I can help solve it personal for you, but this option available only on extended support plan, You may buy personal support of this tool on our Patreon. So, I close this issue. And leave unsolved ... It may be reopened if somebody can reproduce this issue.