这是静态构建吗?

问题描述 投票:1回答:1

首先,请原谅我对这个主题的无知 - 我是一个整体编译的新手,远离程序员,我试图理解静态与共享版本/库的概念。

我已经改编了指南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开关,这个构建会变得更加静态吗?

bash cmake compilation static-libraries cross-compiling
1个回答
2
投票

正如其landing page所说:

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

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

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

图书馆

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

校验。

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

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

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

校验。

一个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对该库及其头文件具有构建时依赖性 - 就像需要与libx265链接的任何其他应用程序一样。但由于它已与静态库libx265.a链接,因此可执行文件一旦构建,就会物理上包含它依赖的libx265.a的所有部分,并且没有运行时依赖性;实际上,运行时对static library的依赖绝对不可能。

此外,既然你指定了:

-DCMAKE_EXE_LINKER_FLAGS="-static"

您的可执行文件的链接是完全静态的,即链接器将不得不查找并链接链接所需的每个库的静态(不是共享)版本,而不仅仅是libx265,以及发布成功的证据。

结论:您的安装似乎完全符合预期,并且您有一个完全静态的可执行文件x265.exe

© www.soinside.com 2019 - 2024. All rights reserved.