AppImage是将应该包含的所有依赖打包成一个可执行文件,即一个应用程序就是一个文件,除了操作系统基础组件,AppImage不需要依赖包即可运行。
下面自定义一个动态库,然后将应用与库打包成AppImage,做到一次打包,到处运行。
安装
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/2.0.0-alpha-1-20241106/linuxdeploy-x86_64.AppImage
chmod +x linuxdeploy-x86_64.AppImage
生成应用
自定义动态库
demolib.c
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
void LOG(char *format, ...)
{
va_list ap;
char str[200] = {0};
va_start(ap, format);
vsnprintf(str, sizeof(str)-1, format, ap);
strcat(str, "\n");
va_end(ap);
printf(str);
}
编译成库
mkdir -p obj
gcc -c -o obj/demolib.o demolib.c
gcc -shared -o libdemo.so obj/demolib.o
链接动态库
main.c
void LOG(char *format, ...);
int main(int argc, char **argv)
{
LOG("Hello world!");
return 0;
}
编译
mkdir -p obj
gcc -c -o obj/main.o main.c
gcc -o demo obj/main.o -L obj -l demo
打包
export LD_LIBRARY_PATH=${PWD}/demo
./linuxdeploy-x86_64.AppImage --create-desktop-file --output=appimage --appdir=demoDir --executable=demo/demo --icon-file=demo/demo.png
运行
./demo-x86_64.AppImage
Hello world!
评论区