mstorsjo / llvm-mingw

An LLVM/Clang/LLD based mingw-w64 toolchain

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Fatal error when build ffmpeg with PGO: 'sys/mman.h' file not found

Andarwinux opened this issue · comments

export CFLAGS="-fprofile-generate"
export LDFLAGS="-fprofile-generate -fuse-ld=lld"

git clone https://github.com/FFmpeg/FFmpeg.git

cd FFmpeg

./configure --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --cc=x86_64-w64-mingw32-clang --disable-debug --disable-ffprobe --disable-ffplay --disable-doc

make -j$(nproc)

src/libswscale/utils.c:31:10: fatal error: 'sys/mman.h' file not found
   31 | #include <sys/mman.h>
      |          ^~~~~~~~~~~~

llvm-mingw nightly

It appears that the issue may not be related to llvm-mingw. It is possible that there might be an underlying problem with the cross compilation environment.

It appears that the issue may not be related to llvm-mingw. It is possible that there might be an underlying problem with the cross compilation environment.

No, I can reproduce this issue with the instructions given. I presume that the chosen options for PGO somehow make some configure tests misdetect things.

See https://patchwork.ffmpeg.org/project/ffmpeg/patch/20240111103300.68446-1-martin@martin.st/ for a potential fix for this issue. The issue is that the profiling runtime, which gets linked in when compiling with those flags, contains an implementation of the mmap function: https://github.com/llvm/llvm-project/blob/llvmorg-17.0.6/compiler-rt/lib/profile/WindowsMMap.c#L28 This caused ffmpeg's configure test to detect it, when it only tested for linking such a function with that name, without checking for the corresponding headers.

Shouldn't that mmap function be private (or not exported) in Windows?

Shouldn't that mmap function be private (or not exported) in Windows?

The profile runtime is statically linked into each executable, so any symbols in the compiler-rt runtime are exposed and available on the same level as the rest of the user's symbols. I guess it would be good to add suitable prefixes to this mmap implementation, to avoid clashes like this.