我的应用程序使用库:boost,ffmpeg(avcodec,avformat,...)。我想打包我的应用程序在Ubuntu 14或更高版本上运行。我不想使用静态构建。
我已经检查了一些安装Ubuntu的计算机。结果如下:
Ubuntu 14.04:
ls -l libavcodec*
libavcodec.a
libavcodec.so -> libavcodec.so.54.35.1
libavcodec.so.54.35.1
ls -l libboost_thread*
libboost_thread.a
libboost_thread.so -> libboost_thread.so.1.54.0
libboost_thread.so.1.54.0
Ubuntu 16.04:
ls -l libavcodec*
libavcodec.a -> libavcodec-ffmpeg.a
libavcodec-ffmpeg.a
libavcodec-ffmpeg.so -> libavcodec-ffmpeg.so.56.60.100
libavcodec-ffmpeg.so.56 -> libavcodec-ffmpeg.so.56.60.100
libavcodec-ffmpeg.so.56.60.100
libavcodec.so -> libavcodec-ffmpeg.so
ls -l libboost_thread*
libboost_thread.a
libboost_thread.so -> libboost_thread.so.1.58.0
libboost_thread.so.1.58.0
我的应用
objdump -p ControlStation | grep NEEDED
NEEDED libavcodec-ffmpeg.so.56
NEEDED libavformat-ffmpeg.so.56
NEEDED libavutil-ffmpeg.so.54
NEEDED libswscale-ffmpeg.so.3
NEEDED libboost_system.so.1.58.0
NEEDED libboost_thread.so.1.58.0
....
我在Ubuntu 16上编译,所以我的应用程序使用文件libavcodec-ffmpeg.so.56和libboost_thread.so.1.58.0。因此,它无法在其他计算机上运行。
通常,共享库应该是
libName.so ---> libName.so.MAJOR
libName.so.MAJOR --> real library file
但是ffmpeg有很多版本,boost库没有符号文件libboost_thread.so.1
任何人都可以帮我解决这个问题吗?谢谢!