weixin_39936558
weixin_39936558
2020-11-26 20:52

AppImage built on Ubuntu 18.04 won't work on previous Ubuntu versions

Hi,

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.

Links: Arena Tracker Static Arena Tracker AppImage

Thanks!

该提问来源于开源项目:probonopd/linuxdeployqt

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

16条回答

  • weixin_39634351 weixin_39634351 5月前

    you can also build in a Docker container or chroot environment or anything like that.

    点赞 评论 复制链接分享
  • weixin_39936558 weixin_39936558 5月前

    I'll take a look on that, thx.

    点赞 评论 复制链接分享
  • weixin_39936558 weixin_39936558 5月前

    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.

    点赞 评论 复制链接分享
  • weixin_39775976 weixin_39775976 5月前

    --appimage-extract will unpack the contents of the AppImage, so you won't need FUSE.

    点赞 评论 复制链接分享
  • weixin_39634351 weixin_39634351 5月前

    call appimagetool*.AppImage --appimage-extract && squashfs-root/AppRun <appimagetool args>.

    点赞 评论 复制链接分享
  • weixin_39936558 weixin_39936558 5月前

    Ok, thx.

    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:

    1. I have statically compiled opencv and qt with -openssl and -no-icu
    2. I have created a static version of ArenaTracker
    3. I have extracted linuxdeployqt.AppImage
    4. 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.
    

    Using ldd -v ArenaTracker on 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

    Thx guys!

    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
    
    点赞 评论 复制链接分享
  • weixin_39775976 weixin_39775976 5月前

    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.

    点赞 评论 复制链接分享
  • weixin_39936558 weixin_39936558 5月前

    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.
    
    点赞 评论 复制链接分享
  • weixin_39775976 weixin_39775976 5月前

    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

    点赞 评论 复制链接分享
  • weixin_39936558 weixin_39936558 5月前

    No idea about Travis CI, never used it.

    点赞 评论 复制链接分享
  • weixin_39775976 weixin_39775976 5月前

    That's what our instructions are for ;-) it's really a cool service. (I have no shares in it.)

    点赞 评论 复制链接分享
  • weixin_39936558 weixin_39936558 5月前

    Ok, I'll check it out ;)

    点赞 评论 复制链接分享
  • weixin_39634351 weixin_39634351 5月前

    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.

    点赞 评论 复制链接分享
  • weixin_39775976 weixin_39775976 5月前

    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.

    点赞 评论 复制链接分享
  • weixin_39936558 weixin_39936558 5月前

    Ok, thx guys!

    I'll install an older LTS version, probably 16.04

    点赞 评论 复制链接分享
  • weixin_39775976 weixin_39775976 5月前

    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.

    点赞 评论 复制链接分享