you can also build in a Docker container or chroot environment or anything like that.
AppImage built on Ubuntu 18.04 won't work on previous Ubuntu versions
Thanks for working on this amazing project.
I have been using AppImage for my qt project Arena Tracker for some time now and it was working great on many distributions.
But recently I upgraded to Ubuntu 18.04 and built a new AppImage there using linuxdeployqt and appimagetool.
One of my users tried to run the new AppImage on Ubuntu 17.10 but if fails to find the newer glibc version that doesn't seem to be bundled in the AppImage file.
Here's the error:
./ArenaTracker.Linux.AppImage: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./ArenaTracker.Linux.AppImage)
Here's the thread talking about the new dependencies and the problems with the new binaries built on Ubuntu 18.04.
- 点赞 评论 复制链接分享
I'll take a look on that, thx.点赞 评论 复制链接分享
Ok, so I have installed chroot with Ubuntu 16.04 and compiled a static version of Arena Tracker on it. I can't get linuxdeployqt-continuous-x86_64.AppImage to work on chroot, problems with fuse and modprobe. I'm stuck following this instructions on sudo modprobe fuse, that gave me a problem similar to this that I didn't figure out how to solve.
So what I did is generate the AppImage on Ubuntu 18.04 from the static binary created on chroot Ubuntu 16.04, that should remove the dependencies to the new libc.点赞 评论 复制链接分享
--appimage-extractwill unpack the contents of the AppImage, so you won't need FUSE.点赞 评论 复制链接分享
appimagetool*.AppImage --appimage-extract && squashfs-root/AppRun <appimagetool args>.点赞 评论 复制链接分享
Extracting the appImage make it work, kind of.
To summarize what I have done to create the AppImage of ArenaTracker, all of this in my chroot environment with ubuntu 16.04:
- I have statically compiled opencv and qt with -openssl and -no-icu
- I have created a static version of ArenaTracker
- I have extracted linuxdeployqt.AppImage
- I run
squashfs-root/AppRun ArenaTracker -appimage
But I get:
linuxdeployqt 4 (commit c17e3f0), build 551 built on 2018-05-09 18:11:07 UTC Not using FHS-like mode app-binary: "/home/triodo/Documentos/build-ArenaTracker-Desktop-Release-AppImage/ArenaTracker" appDirPath: "/home/triodo/Documentos/build-ArenaTracker-Desktop-Release-AppImage" relativeBinPath: "ArenaTracker" ERROR: ldd outputLine: "libicuuc.so.52 => not found" ERROR: for binary: "/home/triodo/Documentos/build-ArenaTracker-Desktop-Release-AppImage/lib/libicui18n.so.52" ERROR: Please ensure that all libraries can be found by ldd. Aborting.
ldd -v ArenaTrackeron the static binary I created doesn't throw any missing dependency
There's no mention to libicu in the ldd, that's normal because qt was compiles with -no-icu
Here's ArenaTracker Static version I use, compiled on chroot ArenaTracker Static
And this is the AppImage created from that static version on Ubuntu 18.04, no chroot, as it throws errors on chroot with Ubuntu 16.04. ArenaTracker AppImage
Edit: The AppImage linked has its own problems (Tested on Ubuntu 17.10 by one of my users):
➜ mozilla_kakadu0 ./ArenaTracker.Linux.AppImage ./ArenaTracker.Linux.AppImage: symbol lookup error: /tmp/.mount_ArenaT9W1Dpl/lib/libatk-1.0.so.0: undefined symbol: g_log_structured_standard点赞 评论 复制链接分享
https://drive.google.com/open?id=17GnLkrfPny4cly5eoHUsn5ATDgeaIRFL includes the AppImage tools and whatnot... these are not supposed to be inside the AppImage. What do you mean by "static" version?
$ file /tmp/.mount_ArenaTi4Faif/ArenaTracker /tmp/.mount_ArenaTi4Faif/ArenaTracker: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=4986e6685e3a507e5025b48c9620e36ce046978d, not stripped
Doesn't look "static" to me.
If you have compiled this on 18.04, then it will not run on older versions.
Please compile on 14.04.点赞 评论 复制链接分享
Forget about the file tagged as ArenaTracker AppImage.
The file tagged as ArenaTracker Static was compiled on Ubuntu 16.04 chroot, and has been compiled statically with opencv and qt. Using that binary to create the appimage on Ubuntu 16.04 chroot throws the error mentioned:
linuxdeployqt 4 (commit c17e3f0), build 551 built on 2018-05-09 18:11:07 UTC Not using FHS-like mode app-binary: "/home/triodo/Documentos/build-ArenaTracker-Desktop-Release-AppImage/ArenaTracker" appDirPath: "/home/triodo/Documentos/build-ArenaTracker-Desktop-Release-AppImage" relativeBinPath: "ArenaTracker" ERROR: ldd outputLine: "libicuuc.so.52 => not found" ERROR: for binary: "/home/triodo/Documentos/build-ArenaTracker-Desktop-Release-AppImage/lib/libicui18n.so.52" ERROR: Please ensure that all libraries can be found by ldd. Aborting.点赞 评论 复制链接分享
I don't think linuxdeployqt works with statically linked executables. Before we investigate this, have you tried to use Travis CI exactly as mentioned here? https://github.com/probonopd/linuxdeployqt#using-linuxdeployqt-with-travis-ci点赞 评论 复制链接分享
No idea about Travis CI, never used it.点赞 评论 复制链接分享
That's what our instructions are for ;-) it's really a cool service. (I have no shares in it.)点赞 评论 复制链接分享
Ok, I'll check it out ;)点赞 评论 复制链接分享
you need to build on the oldest system you want to support. The idea behind that is, any library on a newer system is compatible with the older ABI.
Try building on trusty, then it should work.点赞 评论 复制链接分享
We currently recommend to build on Ubuntu 14.04 because that is the oldest still-supported LTS release. But of course you can choose which oldest system you want to support. Just don't build on a newer system than the oldest one you are targeting.点赞 评论 复制链接分享
Ok, thx guys!
I'll install an older LTS version, probably 16.04点赞 评论 复制链接分享
14.04 is currently the oldest still-supported LTS release, so to be listed in the AppImageHub central directory of available AppImages, your AppImage needs to run there.点赞 评论 复制链接分享