'Problem compiling libsrt for ffmpeg, library not found using pkg-config
I am trying to build ffmpeg and dependencies from sources (as it will be used from a container on aws) but I have hard time with ffmpeg and pkg-config.
I compile static libraries, among which libsrt from sources and put generated files to well defined directories. pkg-config finds srt without problem but ffmpeg doesn't for some reason (see output below).
Here is how it looks like:
Build code (I extracted the interesting parts, other libraries are built as well, I added prints to be able to see what happens):
echo "*** Building libsrt ***"
cd $BUILD_DIR/srt*
make distclean
PKG_CONFIG_PATH="$TARGET_DIR/lib/pkgconfig" \
PATH="$BIN_DIR:$PATH" \
cmake -G "Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX="$TARGET_DIR" \
-DCMAKE_INSTALL_LIBDIR="$TARGET_DIR/lib" \
-DCMAKE_INSTALL_INCLUDEDIR="$TARGET_DIR/include" \
-DCMAKE_INSTALL_BINDIR="$BIN_DIR" \
-DENABLE_SHARED:bool=off \
-DENABLE_C_DEPS:bool=on \
-DENABLE_STATIC:bool=on
make -j $jval
make install
echo '========================================================================'
pwd
echo "$TARGET_DIR"
echo "$BUILD_DIR"
echo 'target_dir=' && ls "$TARGET_DIR"
echo 'lib=' && ls "$TARGET_DIR/lib"
echo 'lib/pkgconfig=' && ls "$TARGET_DIR/lib/pkgconfig"
echo 'bin_dir=' && ls "$BIN_DIR"
echo 'include=' && ls "$TARGET_DIR/include"
echo 'path=' && echo $PATH
pkg-config --modversion srt
export PKG_CONFIG_PATH="$TARGET_DIR/lib/pkgconfig":$PKG_CONFIG_PATH
echo "*** Building FFmpeg ***"
cd $BUILD_DIR/FFmpeg*
make distclean
PATH="$BIN_DIR:$PATH" \
./configure \
--prefix="$TARGET_DIR" \
--pkg-config-flags="--static" \
--extra-cflags="-I$TARGET_DIR/include -I$TARGET_DIR/usr/local/include -I/usr/local/cuda/include" \
--extra-ldflags="-L$TARGET_DIR/lib -L$TARGET_DIR/usr/local/lib -L/usr/local/cuda/lib64" \
--extra-libs="-Wl,-Bstatic -lharfbuzz -lfreetype -lpng -lz -lbz2 -Wl,-Bdynamic -lm -ldl -lpthread -lsrt -lssl -lcrypto" \
--extra-ldexeflags="-Wl,-Bstatic" \
--nvccflags="-gencode arch=compute_75,code=sm_75 -O2" \
--bindir="$BIN_DIR" \
--enable-pic \
--enable-ffplay \
--enable-fontconfig \
--enable-frei0r \
--enable-gpl \
--enable-version3 \
--enable-libass \
--enable-libfribidi \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopenjpeg \
--enable-libopus \
--enable-libsoxr \
--enable-libspeex \
--enable-libtheora \
--enable-libvidstab \
--enable-libvorbis \
--enable-libvpx \
--enable-libwebp \
--enable-libx264 \
--enable-libx265 \
--enable-libxvid \
--enable-libzimg \
--enable-nonfree \
--enable-openssl \
--enable-cuda-nvcc \
--enable-cuvid \
--enable-nvenc \
--enable-libsrt \
--enable-libnpp || tail -n 100 ${HOME}/build/FFmpeg*/ffbuild/config.log
PATH="$BIN_DIR:$PATH" make -j $jval
make install
This what I get printed in the logs (I put [...] to take away parts which are not relevant):
[...]
[100%] Built target srt-file-transmit
Install the project...
-- Install configuration: "Release"
-- Installing: /codebuild/output/ffmpeg/target/lib/libsrt.a
-- Installing: /codebuild/output/ffmpeg/target/include/srt/version.h
-- Installing: /codebuild/output/ffmpeg/target/include/srt/srt.h
-- Installing: /codebuild/output/ffmpeg/target/include/srt/logging_api.h
-- Installing: /codebuild/output/ffmpeg/target/include/srt/access_control.h
-- Installing: /codebuild/output/ffmpeg/target/include/srt/platform_sys.h
-- Installing: /codebuild/output/ffmpeg/target/include/srt/udt.h
-- Installing: /codebuild/output/ffmpeg/target/lib/pkgconfig/haisrt.pc
-- Installing: /codebuild/output/ffmpeg/target/lib/pkgconfig/srt.pc
-- Installing: /codebuild/output/ffmpeg/bin/srt-live-transmit
-- Up-to-date: /codebuild/output/ffmpeg/bin/srt-live-transmit
-- Installing: /codebuild/output/ffmpeg/bin/srt-file-transmit
-- Up-to-date: /codebuild/output/ffmpeg/bin/srt-file-transmit
-- Installing: /codebuild/output/ffmpeg/bin/srt-tunnel
-- Up-to-date: /codebuild/output/ffmpeg/bin/srt-tunnel
-- Installing: /codebuild/output/ffmpeg/bin/srt-ffplay
========================================================================
/codebuild/output/ffmpeg
/codebuild/output/ffmpeg/target
/codebuild/output/ffmpeg/build
target_dir=
bin
etc
include
lib
share
ssl
var
lib=
cmake
[...]
libsrt.a
libssl.a
[...]
pkgconfig
lib/pkgconfig=
[...]
haisrt.pc
[...]
libcrypto.pc
libssl.pc
[...]
openssl.pc
[...]
srt.pc
[...]
bin_dir=
[...]
srt-ffplay
srt-file-transmit
srt-live-transmit
srt-tunnel
[...]
include=
[...]
srt
[...]
path=
/root/.cargo/bin:/root/miniconda3/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/codebuild/user/bin
1.4.3
========================================================================
*** Building FFmpeg ***
ERROR: srt >= 1.3.0 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.
tail: cannot open '/root/build/FFmpeg*/ffbuild/config.log' for reading: No such file or directory
[Container] 2021/06/09 15:03:22 Command did not exit successfully ./build.sh exit status 1
[Container] 2021/06/09 15:03:22 Phase complete: BUILD State: FAILED
[Container] 2021/06/09 15:03:22 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: ./build.sh. Reason: exit status 1
Any idea what can be wrong?
Thanks!
Solution 1:[1]
I've compiled ffmpeg with SRT on debian, using
- the official compile guide in combination
- with llogan's answer for building
SRT.
Solution 2:[2]
TLDR (probably unnecessary):
brew install openssl srt
export CFLAGS="$(freetype-config --cflags) $CFLAGS"
export CPPFLAGS="-I$(brew --prefix openssl)/include $CPPFLAGS"
export LDFLAGS="-L$(brew --prefix openssl)/lib $(freetype-config --libs) $LDFLAGS"
export PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig"
I think the above should work, but if you want to figure it out the following route might help.
You can find hints in ./ffbuild/config.log, where it might say openssl was not found.
On a Mac you might already have it available via brew, but it won't be linked to because Macs use libressl, so the following requirements should satisfy the ERROR: srt >= 1.3.0 not found using pkg-config message:
brew install openssl srt
export LDFLAGS="$(freetype-config --libs)"
export CFLAGS="$(freetype-config --cflags)"
export PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig"
Perhaps optional. Perhaps not:
CPPFLAGSis probably optional.- These additions to
PKG_CONFIG_PATHin the compilation guide may be too:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/opt/X11/lib/pkgconfig:$PKG_CONFIG_PATH
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | drake7 |
| Solution 2 |
