1. 程式人生 > >ffmpeg 靜態連結第三方庫

ffmpeg 靜態連結第三方庫

動態(共享)連結庫自是有諸多優於靜態連結庫的特點:如能共享記憶體空間; 節約整個系統的儲存空間,從而使整個系統速度提高; 當只有某個動態連結庫有更新時--便於維護--只用更新這個庫。

  但在有些情況下,如,伺服器並不是你一個人獨享;伺服器上不止有一個版本的ffmpeg要用; 有一個叢集的伺服器需要你部署和維護,更新。這時能使用靜態連結庫就再好不過啦。

   FFmpeg對第三方庫通常是優先使用動態連結的。可以使用下面介紹的步驟實現這些第三方庫的靜態連結,從而你的ffmpeg只用copy一個程式就可以到處用,也方便了部署和維護。

第三方庫:(3RDLIB_INSTALL_PATH為本機上你想將第三方庫安裝的路徑)

》》》 為FFmpeg-4.0新增libopus靜態庫

1. opus-1.2.1

./configure --prefix=/data/PJT-ffmpeg-4.0/install/ --enable-static --disable-shared

make && make install

Libraries have been installed in:

/data/PJT-ffmpeg-4.0/install/lib

If you ever happen to want to link against installed libraries

in a given directory, LIBDIR, you must either use libtool, and

specify the full pathname of the library, or use the '-LLIBDIR'

flag during linking and do at least one of the following:

- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable

during execution

- add LIBDIR to the 'LD_RUN_PATH' environment variable

during linking

- use the '-Wl,-rpath -Wl,LIBDIR' linker flag

- have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for

more information, such as the ld(1) and ld.so(8) manual pages.

2. ffmpeg-4.0

$ cd ffmpeg-4.0

$ vim linux_configure.sh

#!/bin/sh

./configure \

--prefix=/data/PJT-ffmpeg-4.0/install/ \

--disable-ffplay \

--enable-debug=3 --extra-cflags=-Wall --extra-cflags=-O0 --enable-pic \

--enable-gpl --enable-nonfree --enable-version3 \

--disable-shared --enable-static \

--enable-pthreads --enable-runtime-cpudetect \

--disable-postproc \

--extra-cflags='-I/data/PJT-ffmpeg-4.0/install/include -DREDIRECT_DEBUG_LOG' \

--extra-ldflags='-L/data/PJT-ffmpeg-4.0/install/lib -gl' \

--enable-libopus --enable-encoder=libopus --enable-decoder=libopus \

--enable-libx264 --enable-encoder=libx264 --disable-opencl \

--enable-avfilter --enable-filter=movie

【儲存並退出】

$ ./linux_configure.sh

ERROR: opus not found using pkg-config

If you think configure made a mistake, make sure you are using the latest

version from Git. If the latest version fails, report the problem to the

[email protected] mailing list or IRC #ffmpeg on irc.freenode.net.

Include the log file "ffbuild/config.log" produced by configure as this will help

solve the problem.

$ pkg-config --list-all

libpostproc libpostproc - FFmpeg postprocessing library

libswscale libswscale - FFmpeg image rescaling library

libavdevice libavdevice - FFmpeg device handling library

libssl OpenSSL - Secure Sockets Layer and cryptography libraries

libavfilter libavfilter - FFmpeg audio/video filtering library

libavutil libavutil - FFmpeg utility library

libswresample libswresample - FFmpeg audio resampling library

opus Opus - Opus IETF audio codec (floating-point build)

com_err com_err - Common error description library

openssl OpenSSL - Secure Sockets Layer and cryptography libraries and tools

libidn Libidn - IETF stringprep, nameprep, punycode, IDNA text processing.

zlib zlib - zlib compression library

fdk-aac Fraunhofer FDK AAC Codec Library - AAC codec library

libcrypto OpenSSL-libcrypto - OpenSSL cryptography library

uuid uuid - Universally unique id library

libsepol libsepol - SELinux policy library

libselinux libselinux - SELinux utility library

shared-mime-info shared-mime-info - Freedesktop common MIME database

libcurl libcurl - Library to transfer files with ftp, http, etc.

libavformat libavformat - FFmpeg container format library

x264 x264 - H.264 (MPEG4 AVC) encoder library

libavcodec libavcodec - FFmpeg codec library

$ export PKG_CONFIG_PATH=/data/PJT-ffmpeg-4.0/install/lib/pkgconfig

$ vim ffbuild/config.log

gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -Wall -O0 -I/data/PJT-ffmpeg-4.0/install/include -DREDIRECT_DEBUG_LOG -std=c99 -fomit-frame-pointer -fPIC -pthread -I/data/PJT-ffmpeg-4.0/install/include/opus -L/data/PJT-ffmpeg-4.0/install/lib -c -o /tmp/ffconf.S7eM3X5J/test.o /tmp/ffconf.S7eM3X5J/test.c

gcc -L/data/PJT-ffmpeg-4.0/install/lib -gl -Wl,--as-needed -Wl,-z,noexecstack -I/data/PJT-ffmpeg-4.0/install/include/opus -L/data/PJT-ffmpeg-4.0/install/lib -o /tmp/ffconf.S7eM3X5J/test /tmp/ffconf.S7eM3X5J/test.o -lopus

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(opus_decoder.o): In function `opus_decode_frame':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/src/opus_decoder.c:570: undefined reference to `exp'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(celt_decoder.o): In function `celt_decode_lost':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/celt_decoder.c:669: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/celt_decoder.c:743: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(pitch.o): In function `compute_pitch_gain':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/pitch.c:433: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/pitch.c:433: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(quant_bands.o): In function `amp2Log2':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/quant_bands.c:553: undefined reference to `log'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(quant_bands.o): In function `quant_fine_energy':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/quant_bands.c:379: undefined reference to `floorf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(quant_bands.o): In function `quant_coarse_energy_impl':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/quant_bands.c:202: undefined reference to `floorf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(vq.o): In function `renormalise_vector':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:394: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(vq.o): In function `fast_atan2f':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:406: undefined reference to `floorf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(vq.o): In function `stereo_itheta':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:429: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:428: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(vq.o): In function `fast_atan2f':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:406: undefined reference to `floorf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(vq.o): In function `op_pvq_search_c':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:224: undefined reference to `floorf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(vq.o): In function `exp_rotation':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:86: undefined reference to `cosf'

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:87: undefined reference to `cosf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(vq.o): In function `normalise_residual':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:131: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/vq.c:131: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(bands.o): In function `compute_band_energies':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/bands.c:169: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(bands.o): In function `anti_collapse':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/bands.c:299: undefined reference to `exp'

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/bands.c:300: undefined reference to `sqrt'

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/bands.c:336: undefined reference to `exp'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(bands.o): In function `denormalise_bands':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/bands.c:230: undefined reference to `exp'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(bands.o): In function `quant_band':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/bands.c:1225: undefined reference to `sqrt'

/data/PJT-ffmpeg-4.0/install/lib/libopus.a(bands.o): In function `stereo_merge':

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/bands.c:458: undefined reference to `sqrtf'

/data/PJT-ffmpeg-4.0/3rdlib-source/opus-1.2.1/celt/bands.c:456: undefined reference to `sqrtf'

collect2: ld returned 1 exit status

ERROR: opus not found using pkg-config

【退出】

$ vim configure

enabled libopus && {

enabled libopus_decoder && {

require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create

}

enabled libopus_encoder && {

require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create

}

}

改成:

enabled libopus && {

enabled libopus_decoder && {

require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create -lm

}

enabled libopus_encoder && {

require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create -lm

}

}

【儲存並退出】

$ ./linux_configure.sh && make && make install

3. 測試並驗證

./ffmpeg -i opus_16k1c-old.aac -acodec libopus -b:a 64k -compression_level 10 -y output.opus

ffmpeg version 4.0 Copyright (c) 2000-2018 the FFmpeg developers

built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-23)

configuration: --prefix=/data/PJT-ffmpeg-4.0/install/ --disable-ffplay --enable-debug=3 --extra-cflags=-Wall --extra-cflags=-O0 --enable-pic --enable-gpl --enable-nonfree --enable-version3 --disable-shared --enable-static --enable-pthreads --enable-runtime-cpudetect --disable-postproc --extra-cflags='-I/data/PJT-ffmpeg-4.0/install/include -DREDIRECT_DEBUG_LOG' --extra-ldflags='-L/data/PJT-ffmpeg-4.0/install/lib -gl' --enable-libopus --enable-encoder=libopus --enable-decoder=libopus --enable-libx264 --enable-encoder=libx264 --disable-opencl --enable-avfilter --enable-filter=movie

libavutil 56. 14.100 / 56. 14.100

libavcodec 58. 18.100 / 58. 18.100

libavformat 58. 12.100 / 58. 12.100

libavdevice 58. 3.100 / 58. 3.100

libavfilter 7. 16.100 / 7. 16.100

libswscale 5. 1.100 / 5. 1.100

libswresample 3. 1.100 / 3. 1.100

[aac @ 0x2e4a580] Estimating duration from bitrate, this may be inaccurate

Input #0, aac, from 'opus_16k1c-old.aac':

Duration: 00:02:56.28, bitrate: 56 kb/s

Stream #0:0: Audio: aac (LC), 16000 Hz, mono, fltp, 56 kb/s

Stream mapping:

Stream #0:0 -> #0:0 (aac (native) -> opus (libopus))

Press [q] to stop, [?] for help

Output #0, opus, to 'output.opus':

Metadata:

encoder : Lavf58.12.100

Stream #0:0: Audio: opus (libopus), 16000 Hz, mono, flt, 64 kb/s

Metadata:

encoder : Lavc58.18.100 libopus

size= 1580kB time=00:02:39.95 bitrate= 80.9kbits/s speed= 142x

video:0kB audio:1567kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.864157%

》》》 libspeex 靜態庫的新增:

tar -zxvf speex-1.2.0.tar.gz

cd speex-1.2.0

./configure --prefix=3RD_LIB_INSTALL_PATH --enable-static --disable-shared

make && make install

需要修復ffmpeg的configure檔案

cd /data/ffmpeg

vim configure

將:

enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex

改成:

#enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
enabled libspeex          && require libspeex speex/speex.h speex_decoder_init -lspeex

【儲存並退出】

配置選項新增如下:

#!/bin/sh

./configure \
--prefix=/data/ffmpeg-install/ \
--disable-ffplay --disable-ffserver \
--enable-debug=3 --extra-cflags=-Wall --extra-cflags=-O0 --disable-optimizations --disable-asm --enable-pic \
--enable-gpl --enable-nonfree --enable-version3 \
--disable-shared --enable-static \
--enable-pthreads --enable-runtime-cpudetect \
--enable-zlib --enable-bzlib \
--enable-postproc \
--extra-cflags='-I/data/ffmpeg-3rdlib/install/include -DREDIRECT_DEBUG_LOG' \
--extra-ldflags='-L/data/ffmpeg-3rdlib/install/lib -gl' \
--enable-libx264 --enable-encoder=libx264 --disable-opencl \
--enable-encoder=libfdk_aac  --enable-decoder=libfdk_aac --enable-muxer=adts --enable-libfdk-aac \ 
--enable-libspeex --enable-encoder=libspeex --enable-decoder=libspeex \
--enable-avfilter --enable-filter=movie

》》》》

1. libfaac

#cd  faac-1.28

#./configure --prefix=3RDLIB_INSTALL_PATH --enable-static --disable-shared

#make;make install

2. libmp3lame

#cd lame-3.98.4

#./configure --prefix=3RDLIB_INSTALL_PATH --enable-static --disable-shared

#make; make install

NOTE:

因為它的configure引數並不起作用,所以一定要到3RDLIB_INSTALL_PATH/lib下將libmp3lame的動態庫都刪除。

3. libx264

#cd x264-snapshot-VERSION

#./configure --prefix=3RDLIB_INSTALL_PATH --enable-static

#make; make install

FFmpeg的配置

#cd ffmpeg

#./configure 

--enable-gpl --enable-nonfree --enable-version3 

--disable-shared --enable-static 

--enable-pthreads --enable-runtime-cpudetect 

--enable-zlib --enable-bzlib \

--enable-postproc 

--extra-cflags='-I3RDLIB_INSTALL_PATH/include -DREDIRECT_DEBUG_LOG' 

--extra-ldflags='-L3RDLIB_INSTALL_PATH/lib -gl' 

--enable-libxvid --enable-decoder=libxvid --enable-encoder=libxvid 

--disable-encoder=aac 

--enable-libfaac --enable-encoder=libfaac 

--enable-libmp3lame --enable-encoder=libmp3lame 

--enable-libx264 --enable-encoder=libx264 

--enable-avfilter --enable-filter=movie

#make; 

其實,靜態連結的關鍵就是要保證在你的庫路徑“3RDLIB_INSTALL_PATH”下沒有動態連結庫(.so),這樣ffmpeg在預設的動態庫找不到的情況下就會連結靜態庫。

最新的ffmpeg v0.11編譯與連結

1. libfaac

  1. $cd faac-1.28
  2. $./configure --prefix=3RDLIB_INSTALL_PATH --enable-static --disable-shard
  3. $make
  4. $make install

2. libmp3lame

  1. $tar -zxvf lame-3.98.4.tar.gz
  2. $./configure --prefix=3RDLIB_INSTALL_PATH--enable-static --disable-shared
  3. $make
  4. $make install

3.libx264

  1. $git clone git://git.videolan.org/x264.git
  2. $cd x264
  3. $./configure --prefix=3RDLIB_INSTALL_PATH --enable-static
  4. $make
  5. $make install

4.librtmp

  1. $git clone git://git.ffmpeg.org/rtmpdump
  2. $cd rtmpdump
  3. $cd librtmp

修改Makefile檔案

$vim Makefile

  1. #prefix=/usr/local
  2. prefix=3RDLIB_INSTALL_PATH
  3. ...
  4. #CRYPTO=OPENSSL
  5. CRYPTO=
  6. ...
  7. #SO_LDFLAGS_posix=-shared -Wl,-soname,$@ 
  8. SO_LDFLAGS_posix=-Wl,-soname,$@
  9. ...
  10. #SHARED=yes
  11. SHARED=no 
  12. 儲存並退出
  1. $make
  2. $cd ..
  3. $make SYS=darwin XDEF=-DNO_SSL CRYPTO= SHARED= 
  4. $make install

5. ffmpeg配置

  1. $cd ffmpeg
  2. 修改configure檔案
  3. $vim configure
  4. ...
  5. #enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
  6. enabled librtmp && { check_lib librtmp/rtmp.h RTMP_Socket -lrtmp -lpolarssl -lwinmm -lws2_32 ||
  7.                         check_lib librtmp/rtmp.h RTMP_Socket -lrtmp -lssl -lcrypto -lz ||
  8.                                                 die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp 
  9. version must be >= 2.2.f"; }
  10. 儲存並退出
    1. 也可以改成這樣:
    2. $vim configure
    3. ...
    4. #enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
    5. enabled librtmp && { check_lib librtmp/rtmp.-lrtmp||
    6.                         check_lib librtmp/rtmp.-lrtmp  -lz ||
    7.                                                 die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp 
    8. version must be >= 2.2.f"; }
    9. 儲存並退出
  11. $./configure \
  12. --enable-gpl --enable-nonfree --enable-version3 \
  13. --disable-shared --enable-static \
  14. --enable-pthreads --enable-runtime-cpudetect \
  15. --enable-zlib --enable-bzlib \
  16. --enable-postproc \
  17. --extra-cflags='-I/3RDLIB_INSTALL_PATH/include -DREDIRECT_DEBUG_LOG' \
  18. --extra-ldflags='-L/3RDLIB_INSTALL_PATH/lib -gl' \
  19. --disable-encoder=aac \
  20. --enable-libfaac --enable-encoder=libfaac \
  21. --enable-libmp3lame --enable-encoder=libmp3lame \
  22. --enable-libx264 --enable-encoder=libx264 \
  23. --enable-avfilter --enable-filter=movie \
  24. --enable-librtmp
  25. $make
  26. $make install

在mingw下編譯ffmpeg,並加上對rtmp的支援,即要先編譯librtmp. 編譯過程出了個librtmp not found問題,
​google了一圈,發現有很多類似的問題,但都和我的不完全一樣。
​我的根本問題是mingw下的pkg-config沒有正確安裝。
​librtmp經過make和make install後,庫檔案和標頭檔案都已經分別拷貝到/usr/local/lib和/usr/local/include目錄下,
​ffmpeg在configure時找不到librtmp,為什麼找不到呢?
​百思不得其解,無奈之下google,最終得到提示。

開啟configure檔案,發現下面一行

enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
原來ffmpeg通過pkg-config去找librtmp,難怪找不著了。

解決辦法:

以#符號註釋掉enabled librtmp一行

在configure時加上引數

./configure \

... ...

--extra-ldflags="-L/usr/local/lib" \

--extra-cflags="-I/usr/local/include" \

--extra-libs="-lrtmp" \

... ...

相關推薦

ffmpeg 靜態連結第三方

動態(共享)連結庫自是有諸多優於靜態連結庫的特點:如能共享記憶體空間; 節約整個系統的儲存空間,從而使整個系統速度提高; 當只有某個動態連結庫有更新時--便於維護--只用更新這個庫。   但在有些情況下,如,伺服器並不是你一個人獨享;伺服器上不止有一個版本的ffmpeg要用

Windows下編譯FFmpeg連結第三方libRtmp,生成FFplay

PS: 前段時間一直在研究ffmpeg的編譯,網上也是各種方法(其實大部分都只是編譯了FFmpeg),但是能夠連結成功libRtmp並生成FFplay的方法卻很少能行的通。踩了好多坑,記錄下,希望對大家有所幫助。 一、安裝環境準備   1.在wind

Android-CMakeLists.txt 連結第三方(動態或者靜態)到自己的生成

最近在做關於NDK開發的專案,編譯方式通過cmake。其中一個就是要將第三方動態庫連結到自己的動態庫最終生成一個動態庫供他人呼叫,這個折騰了好久,終於搞好記錄下筆記,免得以後再踩坑,有同樣需求的童鞋可以參考,有錯誤請指出。多的不說,上程式碼.1.首先看目錄結構:第三方庫放在j

使用者目錄連結第三方

使用者目錄連結第三方庫 最近在看公司程式碼時遇到了引用第三方庫boost,於是就去Google上找了安裝包,但是在公司主機上,使用者是沒有root許可權的所以沒法安裝。於是研究了下使用者目錄引用第三方庫問題。   下載安裝boost 參考: https://blog.csdn.net/u0

CMake 學習(一):使用連結第三方

cmake是gnu工具鏈中構建專案的重要一環,而且在windows Linux OS X中都可以使用,是程式設計師(特別是linux程式設計師,因為windows上有無比強大的VS)必備的基本功。 命名變數 set(INC_DIR /usr/local/inclu

靜態連結ffmpeg

ffmpeg靜態連結 在音訊視訊編解碼中,經常使用ffmpeg庫。平時都是使用的動態庫,但是動態庫有一個缺點,就是程式執行時才進行載入。如果你需要經常移植的情況下,每次都需要重新的編譯動態庫,比較麻煩。並且,如果你使用的庫只有你自己的程式使用時,那麼系統只會有

靜態連結ffmpeg注意的問題

1. 最近使用ffmpeg靜態庫進行連結,提示 undefined reference,排查發現靜態庫的順序導致的,靜態庫對先後順序有嚴格要求 2. 使用ffmpeg庫時,在連結時,需要加上-lm -

NDK 連結第三方靜態的方法

將NDK編譯的第三方靜態拷貝到JNI目錄下,在Android.mk中新增如下程式碼 以openssl靜態庫(libcrypto-static.a)為例 第一種連結方法:LOCAL_LDFLAGS :=

ffmpeg編譯的靜態連結問題

安裝了ffmpeg在wince編譯生成dll和.a檔案,但是發現這個.a檔案並不是像win32下面的lib檔案,不能夠直接呼叫,如果直接呼叫會產生error LNK2001: unresolved external sy

Msys2+mingw-w64 編譯VS2013使用的ffmpeg靜態註意事項

help 成功 pacman 重命名 install 代碼 文件 safe lib 1、環境準備 第一步:從http://sourceforge.net/projects/msys2/下載msys2的安裝程序安裝msys2; 第二步:通過msys2的包管理工具pacma

(轉)靜態編譯,動態編譯,靜態連結,動態連結

1.定義 LIB檔案中包含函式程式碼本身,在編譯時直接將程式碼加入程式當中。稱為靜態連結庫static link library。 LIB包含了函式所在的DLL檔案和檔案中函式位置的資訊(入口),程式碼由執行時載入在程序空間中的DLL提供,稱為動態連結庫dynamic link libr

C語言函式:動態連結靜態連結

首先,函式庫就是一些事先寫好的函式的集合,是別人分享的,我們可以拿來使用的。經過一些校準和整理,就形成一份標準化的函式庫。例如glibc 函式庫有兩種提供形式:動態連結庫與靜態連結庫 早起函式庫裡的函式都是直接共享的,就是所謂的開源社群。後來函式庫商業化,就出現了靜態連結庫與動態連結庫。

靜態連結的編譯與使用 linux下的動態連結靜態連結到底是個什麼鬼?(一)靜態連結的編譯與使用

linux下的動態連結庫和靜態連結庫到底是個什麼鬼?(一)靜態連結庫的編譯與使用       知識不等於技術,這句話真的是越工作的時間長越深有體會,學習到的知識只有不斷的實踐,才成真正在自已的心裡紮下根,成為自身的一部分,所以無論如何,我希望我的部落格可以

連結裝載與 第4章 靜態連結

靜態連結 /* a.c */ extern int shared; int main() { int a = 100; swap( &a, &shared); } /* b.c */ int shared = 1; void swap(int* a, i

關於原始檔,標頭檔案,靜態連結檔案,動態連結檔案的的理解

先從原始檔和標頭檔案的關係說起,由於是還是初學階段,只接觸了C++語言和windows平臺下的程式設計,所以只講這兩方面的東東, 標頭檔案的作用:對函式,變數,和類的宣告,其實在標頭檔案也可對一些特殊函式和變數定義,比如可以在標頭檔案中對行內函數和const型別變數定義,由於對類的宣告

GCC編譯過程與動態連結靜態連結(未整理)

來源:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/6410588.html 根據連結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在連結階段被連結的,所以生成的可執行檔案就不受庫的影響,即使庫被刪除,程式依然可以成功執行。而動態庫是在程式執行的時

靜態連結(LIB)和動態連結(DLL),DLL的靜態載入和動態載入,兩種LIB檔案。

靜態連結庫(LIB)和動態連結庫(DLL),DLL的靜態載入和動態載入,兩種LIB檔案。 一、 靜態連結庫(LIB,也簡稱“靜態庫”)與動態連結庫(DLL,也簡稱“動態庫”)的區別 靜態連結庫與動態連結庫都是共享程式碼的方式,如果採用靜態連結庫,則無論你願不願意,lib 中的指令都全部被直接包含在最

ffmpeg安裝第三方

安裝好了ffmpeg後,如果你使用ffmpeg工具去把某個視訊檔案轉成h264視訊編碼、mp3音訊編碼or其他ffmpeg自身不帶的xxx編碼型別,就會看到報錯資訊,unknown encoder 'xxx'。此刻你需要的只要去安裝其他的編碼器就行了,本質上其實是把其他的編碼器以庫的形式安裝好,例如

動態連結靜態連結的優缺點

轉載參考博文 1、靜態連結庫的優點: (1) 程式碼裝載速度快,執行速度略比動態連結庫快; (2) 只需保證在開發者的計算機中有正確的.LIB檔案,在以二進位制形式釋出程式時不需考慮在使用者的計算機上.LIB檔案是否存在及版本問題,可避免dll地獄等問題。 2 、動態連結庫的優點 (

C實現JAVA類似ArrayList的靜態連結

檔案結構: ArrayList.h:標頭檔案 ArrayList.c:實現標頭檔案中的功能 ArrayListTest.c:測試 ArrayList.h 標頭檔案的基本框架: #ifndef _ARRAYLIST_H #define _ARRAYLIST_H /