这是静态版本吗?

时间:2019-03-19 05:53:36

标签: bash cmake compilation static-libraries cross-compiling

首先,请原谅我对这个主题的无知-我是一个整体编译人员,对程序员而言还很陌生,我想了解静态vs共享内部版本/库的概念。

我修改了指南here,使用MinGW-W64工具链从源代码交叉编译x265项目以在Windows上运行。我正在尝试使其成为静态版本,但是当我这样做时:

cd /ffmpeg_sources && if /cd x265 2> /dev/null; then hg pull && hg update && cd ..; else hg clone https://bitbucket.org/multicoreware/x265; fi &&
cd x265/build/linux && PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" \
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/usr/local" -DENABLE_SHARED=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_EXE_LINKER_FLAGS="-static" ../../source \
-DCMAKE_TOOLCHAIN_FILE="/ffmpeg_sources/x265/build/msys/toolchain-x86_64-w64-mingw32.cmake" &&
make -j$(nproc) &&
make install

...它将创建结果文件:

  

-安装:/usr/local/lib/libx265.a
  -安装:/usr/local/include/x265.h
  -安装:/usr/local/include/x265_config.h
  -安装:/usr/local/lib/pkgconfig/x265.pc
  -安装:/usr/local/bin/x265.exe

除了.exe文件之外,安装中还至少包含其他三个文件,其中两个是库,我假设它们存在,因为它们是可执行文件。但是,始终给我的印象是“静态” =可移植,文件少了一点似乎无法满足。

这是创建静态版本时的目的吗?它不依赖于.so.dll文件,而是仅依赖于.a.h文件?还是我只是误解了我正在使用的Cmake开关,并且可以使此构建更加静态吗?

1 个答案:

答案 0 :(得分:2)

如其landing page所说:

  

x265是H.265 / HEVC视频编码器应用程序库,旨在将视频或图像编码为H.265 / HEVC编码的比特流。

x265项目主要提供一个,开发人员可以将其与应用程序链接 为他们提供x265,H.265 / HEVC编码功能。其次,它提供了commandline tool, x265 用于从输入文件到输出文件的H.265 / HEVC编码。

因此,人们希望软件包安装能够提供-

  

-安装:/usr/local/lib/libx265.a

检查。

一个或多个头文件,可用于编译库客户端

  

-安装:/usr/local/include/x265.h

     

-安装:/usr/local/include/x265_config.h

检查。

A pkg-config 要提供的文件 软件包的编译和链接元数据的开发人员。

  

-安装:/usr/local/lib/pkgconfig/x265.pc

检查。

命令行工具

  

-安装:/usr/local/bin/x265.exe

检查。

通常,库软件包提供配置 切换为选择构建共享/动态库-libname.so(Windows:[lib]name.dll) -或静态库-libname.a(Windows:[lib]name.(a|lib))-默认 分享。

您选择了静态构建:

DENABLE_SHARED=OFF

,因此仅获得了静态库libx265.a。您的 命令行可执行文件x265.exe对该库具有 buildtime 依赖项 及其头文件-就像其他任何需要的应用程序一样 与libx265的链接。但由于它已与 static 库链接 libx265.a是可执行文件,一旦生成,便会物理整合 libx265.a依赖于它,并且没有 runtime 依赖关系;确实, 绝对不可能static library依赖运行时。

此外,由于您指定了以下内容:

-DCMAKE_EXE_LINKER_FLAGS="-static"

可执行文件的链接是完全 静态的,即链接器将不得不查找并链接静态的,非共享的 every 库所需的版本。链接,而不仅是libx265,而且在发布的证据中也成功了。

底线:您的安装似乎已经完成,并且具有完全静态的可执行文件x265.exe