master-of-zen / Av1an

Cross-platform command-line AV1 / VP9 / HEVC / H264 encoding framework with per scene quality encoding
GNU General Public License v3.0
1.4k stars 147 forks source link

Unable to build on OSX #815

Open shaneday opened 4 months ago

shaneday commented 4 months ago

I'm trying to build av1an to run on an M2 Mac. I have the git repo cloned and when I run 'cargo build' it reports the following: (I've trimmed some unrelated warnings and the most of the massive cc command line. I can attach the log if needed)

Compiling av1an-core v0.4.1
[...](error: linking with `cc` failed: exit status: 1)
= note: ld: library 'vapoursynth' not found
... "cc" "-arch" "arm64" ... "/Users/shaneday/git/av1an/target/debug/deps/libvapoursynth-2fbdbd40c09d3a15.rlib" ... "/Users/shaneday/git/av1an/target/debug/deps/libvapoursynth_sys-314baf9d1a70c691.rlib" 
... "-lvapoursynth" "-lvapoursynth-script" ...

I've installed vapoursynth using 'brew install vapoursynth' and I can see the vapoursynth library files:

❯ ls /opt/homebrew/lib/libvapoursynth*
/opt/homebrew/lib/libvapoursynth-script.0.dylib
/opt/homebrew/lib/libvapoursynth-script.a
/opt/homebrew/lib/libvapoursynth-script.dylib
/opt/homebrew/lib/libvapoursynth.a
/opt/homebrew/lib/libvapoursynth.dylib

I have tried following ChatGPTs advice and adding to Cargo.toml:

[build]
rustflags = ["-L/opt/homebrew/lib"]

and also tried:

CARGO_LINKFLAGS="-L/opt/homebrew/lib" cargo build

without any luck.

Some guidance would be appreciated. I'm familiar with the command line and C programming, but I've never touched rust or cargo.

shaneday commented 4 months ago

I figure I'll drop the 'CARGO_LINKFLAGS="-L/opt/homebrew/lib" cargo build' log here just in case it is needed.

cargo-build.log

joshurawr commented 2 months ago

same issue, same platform, on macOS 14.4.1, same error and same log output references missing vapoursynth library

shaneday commented 3 weeks ago

I found a workaround. The system "cc" on OSX doesn't include the path where homebrew installs libraries. So, it's up to the user to add that path when needed. You can do so as below. I don't recall where I got the CARGO_LINKFLAGS suggestion in my question. But either LIBRARY_PATH or RUSTFLAGS can do the trick.

brew install vapoursynth export LIBRARY_PATH="$LIBRARY_PATH:/opt/homebrew/lib" cargo build --release

or

brew install vapoursynth export RUSTFLAGS="-L /opt/homebrew/lib" cargo build --release

Install the new av1an binary

cp target/release/av1an /usr/local/bin/

Note: The above only works after commit "6db3966 Support ffmpeg 7.0", which isn't included in any tagged release yet. So, you'll need to be using the bleeding edge.