如何在Linux上使用共享库分发应用程序

时间:2018-04-04 07:04:03

标签: linker shared-libraries

我的应用程序使用库: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

任何人都可以帮我解决这个问题吗?谢谢!

0 个答案:

没有答案