AppImage not executing

Hi.

I'm trying to create an AppImage for one of my programs.

First things first. Here's some pertinent information:

ignatius@ghost:~/igterm.appdir$ tree
.
|-- AppRun
|-- build.sh
|-- igTerm
|-- igTerm-x86_64.AppImage
|-- igTerm.desktop
|-- igterm.png
`-- lib64
    |-- ld-linux-x86-64.so.2
    |-- libc.so
    |-- libc.so.6
    |-- libncurses++.a
    |-- libncurses++w.a
    |-- libncurses.a
    |-- libncurses.so
    |-- libncurses.so.5 -> libncurses.so.5.9
    |-- libncurses.so.5.9
    |-- libncurses.so.6 -> libncurses.so.6.4
    |-- libncurses.so.6.4
    |-- libncursesw.a
    |-- libncursesw.so
    |-- libncursesw.so.6 -> libncursesw.so.6.4
    |-- libncursesw.so.6.4
    |-- libtinfo.so -> libtinfo.so.6
    |-- libtinfo.so.5 -> libtinfo.so.5.9
    |-- libtinfo.so.5.9
    |-- libtinfo.so.6 -> libtinfo.so.6.4
    `-- libtinfo.so.6.4

2 directories, 26 files

ignatius@ghost:~/igterm.appdir$ cat AppRun 
#!/bin/sh
cd "$(dirname "$0")"
export LD_LIBRARY_PATH=lib64/:/lib/:$LD_LIBRARY_PATH
./igTerm $1 $2
ignatius@ghost:~/igterm.appdir$ cat igTerm.desktop 
[Desktop Entry]
Name=igTerm
Type=Application
Version=1.0
Terminal=false
Categories=Application;
Exec=igTerm
Icon=igterm
appimagetool ../igterm.appdir
appimagetool, continuous build (commit 5735cc5), build <local dev build> built on 2023-03-08 22:52:04 UTC
/home/ignatius/igterm.appdir/igTerm.desktop: warning: value "Application;" for key "Categories" in group "Desktop Entry" contains a deprecated value "Application"
/home/ignatius/igterm.appdir/igTerm.desktop: hint: value "Application;" for key "Categories" in group "Desktop Entry" does not contain a registered main category; application might only show up in a "catch-all" section of the application menu
Using architecture x86_64
/home/ignatius/igterm.appdir should be packaged as igTerm-x86_64.AppImage
WARNING: AppStream upstream metadata is missing, please consider creating it
         in usr/share/metainfo/igTerm.appdata.xml
         Please see https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html#sect-Quickstart-DesktopApps
         for more information or use the generator at http://output.jsbin.com/qoqukof.
Generating squashfs...
Parallel mksquashfs: Using 12 processors
Creating 4.0 filesystem on igTerm-x86_64.AppImage, block size 131072.
[===============================================================================================================================================================================================================|] 47/47 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
        compressed data, compressed metadata, compressed fragments,
        compressed xattrs, compressed ids
        duplicates are removed
Filesystem size 1755.28 Kbytes (1.71 Mbytes)
        41.37% of uncompressed filesystem size (4242.64 Kbytes)
Inode table size 597 bytes (0.58 Kbytes)
        47.42% of uncompressed inode table size (1259 bytes)
Directory table size 356 bytes (0.35 Kbytes)
        53.78% of uncompressed directory table size (662 bytes)
Number of duplicate files found 2
Number of inodes 31
Number of files 20
Number of fragments 1
Number of symbolic links  8
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 3
Number of ids (unique uids + gids) 1
Number of uids 1
        root (0)
Number of gids 1
        root (0)
Embedding ELF...
Marking the AppImage as executable...
Embedding MD5 digest
Success

Please consider submitting your AppImage to AppImageHub, the crowd-sourced
central directory of available AppImages, by opening a pull request
at https://github.com/AppImage/appimage.github.io

And, finally, I get this when I try to execute the code (on a "foreign" machine):

./igTerm-x86_64.AppImage
./igTerm: /lib64/ld-linux-x86-64.so.2: version 'GLIBC_2.35' not found (required by lib64/libc.so.6)

And, yes those ld libraries exist:

ignatius@ghost ~/i/lib64> ls -l ld-linux-x86-64.so.2
lrwxrwxrwx 1 ignatius ignatius 42 Aug 15 02:10 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2*

Anyone know what the problem might be? I tried to be as verbose as possible.

Thank you for any and all help.

Its the GLIBC_2.35 that is missing...

How would I go about adding it to the program (the AppImage)?

It's a library so I would start by looking if I have it somewhere then figuring out why it is not in the LIBPATH... because it can become tricky e.g. you have it but you updated another utility that required more recent version, will moan and say this one is deprecated, and you get you installing a newer version, and removes the older one from the path... or you may find yourself having to deal with many versions of different libraries to please all the stuff you installed and in that case you have the hard work of getting for each everything right, that means the correct environment so it can find what it requires to compile or run
Maybe my peers can help you here as I have retied 5 years ago, and if I can remember I used to do such thing I have forgotten how...

1 Like

Hmm, the AppRun shell-wrapper sets LD_LIBRARY_PATH to the application's lib64/ directory with hopefully the required libc.so
Can you run it?

./AppRun

If yes, the igTerm.desktop should run it as well:

Exec=AppRun

It still is not executing. :frowning:

One normal approach is to build and test the AppImage on an older system or within a container that mimics an older Linux distribution. This helps ensure compatibility across a wider range of systems, including those with older GLIBC versions.

This is because the error message ./igTerm: /lib64/ld-linux-x86-64.so.2: version 'GLIBC_2.35' not found (required by lib64/libc.so.6) indicates that your AppImage is built with a version of the GNU C Library (GLIBC) that is incompatible with the target system where you’re trying to run it.

You can build and test it on another system (older system) with static libs and then simply move the static version over to the system where you are having issues.

Your AppImage seems to depend on GLIBC 2.35, but the system you are working on likely has an older version.

You can check easily enough @ignatius

1 Like

Sorry for the late reply. But i'm still getting the same error using the newest Slackware in a VM

./igTerm: /lib64/ld-linux-x86-64.so.2: version 'GLIBC_2.35'` not found (required by `lib64/libc.so.6`)

Consider using a static build, @ignatius

  • Try using or creating a statically linked version of FFmpeg. This would bundle all required libraries (like glibc) within the binary, reducing dependency issues.

  • You can obtain a precompiled static build of FFmpeg from FFmpeg’s website or build it yourself with the following options:

./configure --enable-static --disable-shared --extra-ldflags="-static"
make

Static Builds

https://johnvansickle.com/ffmpeg/

Again, sorry for the late reply. Actually, FFmpeg has nothing to do with this problem.
igTerm is actually a telnet client.

Thanks.

1 Like

I was quickly looking for static builds which uses GLIBC and ran across FFmeg as an example.

Sorry for any confusion this caused @ignatius !

Since igTerm is a telnet client, the compatibility issue you’re facing with glibc on Slackware is still likely due to differences in the library versions between systems.

To potentially address the problem:

• Consider recompiling igTerm on your Slackware VM to match the available glibc version.

• Alternatively, use a static build to include the required libraries within the binary.

Sorry, I'm not more focused on your problem. Got a lot going on this week. I'm sure others can assist you better.

Ok. I'm attempting to build a statically built binary. I can compile it, and it runs.
There's just one problem. When I go to launch it, it says:

busybox: applet not found

I can get it to work like this:

The problem here, is that I can't use my UI for the telnet client. It's just straight telnet.

busybox telnet somehost portnumber

So, my question now, is how do I make busybox "use" the only selected applet inside of busybox as the first parameter?

Like this:

busybox and it displays the UI.

Thanks.

1 Like

To launch a statically compiled BusyBox binary and have it execute a specific applet by default (like a UI for a telnet client), you need to set up a default applet or ensure that the binary automatically runs the desired applet upon execution

You may be able to search for how do to this task @ignatius or see if ChatGPT can offer a plausible step-by-step list of how to accomplish this next step.

I some how botched something now. I cannot compile at all. It throws these errors:
https://paste.c-net.org/WalkingBearded

I'm not sure what the problem is.

I toggled the "Static Build" in make menuconfig

Any and all help are greatly appreciated.

Thank you.

Often it is better to delete your work products, download again, and start all over.

Make small changes and not big ones so you will know exactly what caused the error.