CCExtractor / rusty_ffmpeg

FFI bindings for FFmpeg inner libraries.

Home Page:https://crates.io/crates/rusty_ffmpeg

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build error on macos 12 (avcodec.h:30:10: fatal error: 'errno.h' file not found)

niuhuan opened this issue · comments

install ffmpeg

git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout release/4.4
mkdir build
cd build
../configure --prefix=/Volumes/DATA/Runtimes/ffmpeg4.4
make -j12
make install

build

export FFMPEG_PKG_CONFIG_PATH=/Volumes/DATA/Runtimes/ffmpeg4.4/lib/pkgconfig
cargo build --release

log

Caused by:
  process didn't exit successfully: `/Volumes/DATA/Projects/bili-cli-rs/target/debug/build/rusty_ffmpeg-941793697a4a1cda/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=LIBAVCODEC_NO_PKG_CONFIG

...

  --- stderr
  /Volumes/DATA/Runtimes/ffmpeg4.4/include/libavcodec/avcodec.h:30:10: fatal error: 'errno.h' file not found
  thread 'main' panicked at 'Binding generation failed.: ClangDiagnostic("/Volumes/DATA/Runtimes/ffmpeg4.4/include/libavcodec/avcodec.h:30:10: fatal error: 'errno.h' file not found\n")', /Volumes/DATA/Runtimes/.cargo/registry/src/github.com-1ecc6299db9ec823/rusty_ffmpeg-0.10.0+ffmpeg.5.1/build.rs:161:10
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Search in gihub

signalwire/freeswitch#42

rust-embedded/itm#26

And then

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/errno.h is exits.

I had tried more way, but the problem still exists.

export CFLAGS="-I /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include"
export CXXFLAGS="-I /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include"
export CCFLAGS="-I /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include"

You can try which clang to check if you are using the clang provided in CommandLineTools

I have tried switch clang localtion , bug build failed too

# which clang
/usr/bin/clang

# /usr/bin/clang --version
Apple clang version 14.0.0 (clang-1400.0.29.102)
Target: arm64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

# sudo xcode-select -s /Library/Developer/CommandLineTools

# /usr/bin/clang --version
Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
FFMPEG_PKG_CONFIG_PATH=/Volumes/DATA/Runtimes/ffmpeg4.4/lib/pkgconfig  cargo build
  --- stderr
  /Volumes/DATA/Runtimes/ffmpeg4.4/include/libavcodec/avcodec.h:30:10: fatal error: 'errno.h' file not found
  thread 'main' panicked at 'Binding generation failed.: ClangDiagnostic("/Volumes/DATA/Runtimes/ffmpeg4.4/include/libavcodec/avcodec.h:30:10: fatal error: 'errno.h' file not found\n")', /Volumes/DATA/Runtimes/.cargo/registry/src/github.com-1ecc6299db9ec823/rusty_ffmpeg-0.10.0+ffmpeg.5.1/build.rs:161:10
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...

You can try create a tmp.c:

#include<errno.h>

int main() {
    return 0;
}

Then run clang tmp.c -v to see the searched include path of your clang. Here is the output on my macOS machine:

Apple clang version 14.0.0 (clang-1400.0.29.102)
Target: arm64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
 "/Library/Developer/CommandLineTools/usr/bin/clang" -cc1 -triple arm64-apple-macosx12.0.0 -Wundef-prefix=TARGET_OS_ -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -Werror=implicit-function-declaration -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name tmp.c -mrelocation-model pic -pic-level 2 -mframe-pointer=non-leaf -fno-strict-return -fno-rounding-math -funwind-tables=2 -fobjc-msgsend-selector-stubs -target-sdk-version=12.3 -fvisibility-inlines-hidden-static-local-var -target-cpu apple-m1 -target-feature +v8.5a -target-feature +fp-armv8 -target-feature +neon -target-feature +crc -target-feature +crypto -target-feature +dotprod -target-feature +fp16fml -target-feature +ras -target-feature +lse -target-feature +rdm -target-feature +rcpc -target-feature +zcm -target-feature +zcz -target-feature +fullfp16 -target-feature +sm4 -target-feature +sha3 -target-feature +sha2 -target-feature +aes -target-abi darwinpcs -fallow-half-arguments-and-returns -debugger-tuning=lldb -target-linker-version 819.6 -v -resource-dir /Library/Developer/CommandLineTools/usr/lib/clang/14.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include -internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include -internal-isystem /Library/Developer/CommandLineTools/usr/lib/clang/14.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -internal-externc-isystem /Library/Developer/CommandLineTools/usr/include -Wno-reorder-init-list -Wno-implicit-int-float-conversion -Wno-c99-designator -Wno-final-dtor-non-final-class -Wno-extra-semi-stmt -Wno-misleading-indentation -Wno-quoted-include-in-framework-header -Wno-implicit-fallthrough -Wno-enum-enum-conversion -Wno-enum-float-conversion -Wno-elaborated-enum-base -Wno-reserved-identifier -Wno-gnu-folding-constant -Wno-cast-function-type -Wno-bitwise-instead-of-logical "-fdebug-compilation-dir=/Users/donoughliu/Downloads/untitled folder" -ferror-limit 19 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fmax-type-align=16 -fcommon -fcolor-diagnostics -clang-vendor-feature=+messageToSelfInClassMethodIdReturnType -clang-vendor-feature=+disableInferNewAvailabilityFromInit -clang-vendor-feature=+disableNonDependentMemberExprInCurrentInstantiation -fno-odr-hash-protocols -clang-vendor-feature=+enableAggressiveVLAFolding -clang-vendor-feature=+revert09abecef7bbf -clang-vendor-feature=+thisNoAlignAttr -clang-vendor-feature=+thisNoNullAttr -mllvm -disable-aligned-alloc-awareness=1 -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /var/folders/r6/j590ws5x0gj6dfgv0jw3lj9w0000gn/T/tmp-352186.o -x c tmp.c
clang -cc1 version 14.0.0 (clang-1400.0.29.102) default target arm64-apple-darwin21.6.0
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /Library/Developer/CommandLineTools/usr/lib/clang/14.0.0/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
 "/Library/Developer/CommandLineTools/usr/bin/ld" -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch arm64 -platform_version macos 12.0.0 12.3 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o a.out -L/usr/local/lib /var/folders/r6/j590ws5x0gj6dfgv0jw3lj9w0000gn/T/tmp-352186.o -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/14.0.0/lib/darwin/libclang_rt.osx.a

You can check if /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include printed. If not, try reinstall the CommandLineTools or provide the include path with environment variable manually (ref).

➜  tmp clang main.c -v
Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
 "/Library/Developer/CommandLineTools/usr/bin/clang" -cc1 -triple arm64-apple-macosx12.0.0 -Wundef-prefix=TARGET_OS_ -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -Werror=implicit-function-declaration -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model pic -pic-level 2 -mframe-pointer=non-leaf -fno-strict-return -fno-rounding-math -funwind-tables=2 -fobjc-msgsend-selector-stubs -target-sdk-version=13.0 -fvisibility-inlines-hidden-static-local-var -target-cpu apple-m1 -target-feature +v8.5a -target-feature +fp-armv8 -target-feature +neon -target-feature +crc -target-feature +crypto -target-feature +dotprod -target-feature +fp16fml -target-feature +ras -target-feature +lse -target-feature +rdm -target-feature +rcpc -target-feature +zcm -target-feature +zcz -target-feature +fullfp16 -target-feature +sm4 -target-feature +sha3 -target-feature +sha2 -target-feature +aes -target-abi darwinpcs -fallow-half-arguments-and-returns -debugger-tuning=lldb -target-linker-version 820.1 -v -resource-dir /Library/Developer/CommandLineTools/usr/lib/clang/14.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include -internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include -internal-isystem /Library/Developer/CommandLineTools/usr/lib/clang/14.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -internal-externc-isystem /Library/Developer/CommandLineTools/usr/include -Wno-reorder-init-list -Wno-implicit-int-float-conversion -Wno-c99-designator -Wno-final-dtor-non-final-class -Wno-extra-semi-stmt -Wno-misleading-indentation -Wno-quoted-include-in-framework-header -Wno-implicit-fallthrough -Wno-enum-enum-conversion -Wno-enum-float-conversion -Wno-elaborated-enum-base -Wno-reserved-identifier -Wno-gnu-folding-constant -Wno-cast-function-type -Wno-bitwise-instead-of-logical -fdebug-compilation-dir=/Volumes/DATA/Downloads/tmp -ferror-limit 19 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fmax-type-align=16 -fcommon -fcolor-diagnostics -clang-vendor-feature=+messageToSelfInClassMethodIdReturnType -clang-vendor-feature=+disableInferNewAvailabilityFromInit -clang-vendor-feature=+disableNonDependentMemberExprInCurrentInstantiation -fno-odr-hash-protocols -clang-vendor-feature=+enableAggressiveVLAFolding -clang-vendor-feature=+revert09abecef7bbf -clang-vendor-feature=+thisNoAlignAttr -clang-vendor-feature=+thisNoNullAttr -mllvm -disable-aligned-alloc-awareness=1 -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /var/folders/kw/knps9h413c768l8_jt2kz7gm0000gn/T/main-b6da19.o -x c main.c
clang -cc1 version 14.0.0 (clang-1400.0.29.202) default target arm64-apple-darwin21.6.0
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /Library/Developer/CommandLineTools/usr/lib/clang/14.0.0/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
 "/Library/Developer/CommandLineTools/usr/bin/ld" -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch arm64 -platform_version macos 12.0.0 13.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o a.out -L. -L/Volumes/DATA/Runtimes/ROOT/lib -L/Volumes/DATA/Runtimes/llvm/lib -L/usr/local/lib /var/folders/kw/knps9h413c768l8_jt2kz7gm0000gn/T/main-b6da19.o -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/14.0.0/lib/darwin/libclang_rt.osx.a

I had reinstall command line tools. But not work too.

Maybe it's because my ffmpeg is not with brew? I don't like to use brew. I will use the virtual machine to test later

Maybe it's because my ffmpeg is not with brew? I don't like to use brew. I will use the virtual machine to test later

Nope, the FFmpeg provided by homebrew is outdated(which has linking issues in my previous experience) and un-customizable, people should always build ffmpeg with source code.

As your log shows that /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include is searched, I think your clang is correctly configured.

clang-sys is used bindgen(dependency of rusty_ffmpeg) to find out the libclang.dylib on macOS. Please try cargo clean and run export LIBCLANG_PATH=/Library/Developer/CommandLineTools/usr/lib before building to explicitly provide the path of libclang.dylib(ref). You might not be using the libclang.dylib provided by the official CommandLineTools. :-(

You can contact me with QQ Mjk5MzU5MzgwNQ== if the problem persists.

LIBCLANG_PATH=/Library/Developer/CommandLineTools/usr/lib

Good job, the problem is solved after delete llvm path from environments.


export LIBCLANG_PATH=/Library/Developer/CommandLineTools/usr/lib is no effect.

(Just reply to the method you provided. My environment variables are set unreasonably)

my .zshrc

export LLVM_HOME=$RUNTIMES_DIR/llvm
export PATH=$PATH:$LLVM_HOME/bin
export LIBRARY_PATH=$LIBRARY_PATH:$LLVM_HOME/lib
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$LLVM_HOME/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LLVM_HOME/lib