ffmpeg built on mac 10.13 fails when ran on other computer (dyld: Library not loaded libmp3lame.0.dylib)

215 Views Asked by At

I have a shell script called buildffmpeg.sh which I call with the command $ sh buildffmpeg.sh on my mac os high sierra 10.13 machine:

#!/bin/bash

# If you get error `c compiler failed` run `sudo apt install libglfw3-dev libglew-dev`
# apt-get install build-essential
# apt-get build-dep ffmpeg
# when running this on mac, you need to install some libraries such as 'brew install opus'

set -e

CWD=$(pwd)
PACKAGES="$CWD/packages"
WORKSPACE="$CWD/workspace"
ADDITIONAL_CONFIGURE_OPTIONS=""


mkdir -p "$PACKAGES"
mkdir -p "$WORKSPACE"

FFMPEG_TAG="$1"
FFMPEG_URL="http://git.ffmpeg.org/gitweb/ffmpeg.git/snapshot/74c4c539538e36d8df02de2484b045010d292f2c.tar.gz"

FFMPEG_ARCHIVE="$PACKAGES/ffmpeg.tar.gz"

if [ ! -f "$FFMPEG_ARCHIVE" ]; then
    echo "Downloading tag ${FFMPEG_TAG}..."
    curl -L -o "$FFMPEG_ARCHIVE" "$FFMPEG_URL"
fi

EXTRACTED_DIR="$PACKAGES/extracted"

mkdir -p "$EXTRACTED_DIR"

echo "Extracting..."
tar -xf "$FFMPEG_ARCHIVE" --strip-components=1 -C "$EXTRACTED_DIR"

cd "$EXTRACTED_DIR"

echo "Building..."

# Min electron supported version
MACOS_MIN="10.10"

./configure $ADDITIONAL_CONFIGURE_OPTIONS \
    --pkgconfigdir="$WORKSPACE/lib/pkgconfig" \
    --prefix=${WORKSPACE} \
    --pkg-config-flags="--static" \
    --extra-cflags="-I$WORKSPACE/include -mmacosx-version-min=${MACOS_MIN}" \
    --extra-ldflags="-L$WORKSPACE/lib -mmacosx-version-min=${MACOS_MIN} -L/usr/local/opt/lame/lib -Wl,-rpath,/usr/local/opt/lame/lib" \
    --extra-libs="-lpthread -lm" \
    --enable-static \
    --disable-securetransport \
    --disable-debug \
    --disable-shared \
    --disable-ffplay \
    --disable-lzma \
    --disable-doc \
    --enable-version3 \
    --enable-pthreads \
    --enable-runtime-cpudetect \
    --enable-avfilter \
    --enable-filters \
    --disable-libxcb \
    --enable-gpl \
    --disable-libass \
    --enable-libmp3lame \
    --enable-libx264 \
    --enable-libopus

make -j 4
make install

otool -L "$WORKSPACE/bin/ffmpeg"
otool -L "$WORKSPACE/bin/ffprobe"

echo "Building done. The binaries can be found here: $WORKSPACE/bin/ffmpeg $WORKSPACE/bin/ffprobe"

mkdir ffmpeg-mac/ 
cp -r "$WORKSPACE/bin/" "$CWD/ffmpeg-mac/"

rm -rf "$PACKAGES"
rm -rf "$WORKSPACE"

exit 0

When it finishes, I have a folder ffmpeg-mac/ which contains two built executables ffmpeg and ffprobe.

but if I try to move the ffmpeg-mac folder onto my other macbook, running 11.2.3 big sur, and if i try to call my built ffmpeg file with ./ffmpeg-mac/ffmpeg, it fails with this error:

$ ./ffmpeg-mac/ffmpeg 
dyld: Library not loaded: /usr/local/opt/lame/lib/libmp3lame.0.dylib
  Referenced from: /Users/martinbarker/Documents/projects/rendertunev1.1.2/./ffmpeg-mac/ffmpeg
  Reason: image not found
Abort trap: 6

So I think when I run the script to build ffmpeg on my mac 10.13 high sierra machine, it for some reason is not including the file libmp3lame.0.dylib. I've tried using brew to uninstall, install, unlink, and link lame, but no luck. I've tried manually editing my shell script to include the file but no luck.

Can anyone help me fix my build script so that when I build ffmpeg on high sierra, I can use the finished built file on other mac computers?

0

There are 0 best solutions below