m-ab-s / media-autobuild_suite

This Windows Batchscript helps setup a Mingw-w64 compiler environment for building ffmpeg and other media tools under Windows.
GNU General Public License v3.0
1.5k stars 257 forks source link

Error running build when update libjxl - undefined reference to `__imp__ZN3hwy16SupportedTargetsEv' #2493

Closed ycwan closed 9 months ago

ycwan commented 11 months ago
22:20:46   Running git update for libjxl...
22:21:07 ┌ libjxl git  .................................. [Updates found]
22:21:12 ├ Running uninstall...
22:21:20 ├ Running cmake...
22:21:49 ├ Running build...
Likely error (tail of the failed operation logfile):
C:/MinGW-w64/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: tools/libjxl_tool.a(codec_config.cc.o):codec_config.c:(.text+0x2aa): undefined reference to `__imp__ZN3hwy16SupportedTargetsEv'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
[1/8] cmd.exe /C "cd /D C:\MinGW-w64\build\libjxl-git\build-64bit\tools && C:\MinGW-w64\msys64\mingw64\bin\cmake.exe -D JPEGXL_ROOT_DIR=C:/MinGW-w64/build/libjxl-git -D DST=C:/MinGW-w64/build/libjxl-git/build-64bit/tools/tool_version_git.h -P C:/MinGW-w64/build/libjxl-git/tools/git_version.cmake"
[2/6] Linking CXX executable tools\cjxl.exe
FAILED: tools/cjxl.exe
cmd.exe /C "cd . && C:\MinGW-w64\msys64\mingw64\bin\ccache.exe  g++ -fstack-protector-strong -mtune=generic -O2 -pipe -mthreads -fno-rtti -funwind-tables -O3 -DNDEBUG -O2 -pipe -static-libgcc -fstack-protector-strong -static-libstdc++ -static -static-libgcc -static-libstdc++    -LC:/MinGW-w64/msys64/mingw64/lib -lbrotlidec -lbrotlicommon -lbrotlienc tools/CMakeFiles/cjxl.dir/cjxl_main.cc.o -o tools\cjxl.exe -Wl,--out-implib,tools\libcjxl.dll.a -Wl,--major-image-version,0,--minor-image-version,0  -Wl,-Bstatic  -lstdc++  -lpthread  -Wl,-Bdynamic  lib/libjxl.a  lib/libjxl_extras_codec-static.a  lib/libjxl_threads.a  tools/libjxl_tool.a  lib/libjxl.a  C:/MinGW-w64/msys64/mingw64/lib/libbrotlidec.a  -lbrotlidec  C:/MinGW-w64/msys64/mingw64/lib/libbrotlicommon.a  -LC:/MinGW-w64/msys64/mingw64/lib  C:/MinGW-w64/msys64/mingw64/lib/libbrotlienc.a  -lbrotlienc  -lbrotlicommon  third_party/liblcms2.a  C:/MinGW-w64/msys64/mingw64/lib/libgif.a  C:/MinGW-w64/msys64/mingw64/lib/libjpeg.a  third_party/sjpeg/libsjpeg.a  C:/MinGW-w64/msys64/mingw64/lib/libpng.a  C:/MinGW-w64/msys64/mingw64/lib/libz.a  C:/MinGW-w64/local64/lib/libhwy.a  -Wl,-Bstatic  -lstdc++  -lpthread  -Wl,-Bdynamic  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
C:/MinGW-w64/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: tools/libjxl_tool.a(codec_config.cc.o):codec_config.c:(.text+0x2aa): undefined reference to `__imp__ZN3hwy16SupportedTargetsEv'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
build failed. Check C:/MinGW-w64/build/libjxl-git/build-64bit/ab-suite.build.log
This is required for other packages, so this script will exit.
22:26:56   Creating diagnostics file...

Attach C:\MinGW-w64\build\logs.zip to the GitHub issue.
Make sure the suite is up-to-date before reporting an issue. It might've been fixed already.

Try running the build again at a later time.

logs.zip ab-suite.build.log

LigH-de commented 11 months ago

Confirming. Large number of undefined references.

LigH-de commented 11 months ago

@kmilos in https://github.com/libjxl/libjxl/issues/2736#issuecomment-1680444281

Looks like -lhwy is missing?

ab-suite.cmake.log reports: -- Found HWY: G:/MABS/local32/lib/libhwy.a (found suitable version "1.0.6", minimum required is "1.0.4")

Compiler call is: cmd.exe /C "cd . && G:\MABS\msys64\mingw32\bin\ccache.exe g++ -fstack-protector-strong -mtune=generic -O2 -pipe -mthreads -fno-rtti -funwind-tables -O3 -DNDEBUG -O2 -pipe -static-libgcc -fstack-protector-strong -static-libstdc++ -static -static-libgcc -static-libstdc++ -LG:/MABS/msys64/mingw32/lib -lbrotlidec -lbrotlicommon -lbrotlienc tools/CMakeFiles/djpegli.dir/djpegli.cc.o -o tools\djpegli.exe -Wl,--out-implib,tools\libdjpegli.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic lib/libjxl_extras-static.a tools/libjxl_tool.a G:/MABS/msys64/mingw32/lib/libgif.a G:/MABS/msys64/mingw32/lib/libjpeg.a third_party/sjpeg/libsjpeg.a G:/MABS/local32/lib/libpng.a G:/MABS/msys64/mingw32/lib/libz.a lib/libjxl.a G:/MABS/msys64/mingw32/lib/libbrotlidec.a -lbrotlidec G:/MABS/msys64/mingw32/lib/libbrotlicommon.a -LG:/MABS/msys64/mingw32/lib G:/MABS/msys64/mingw32/lib/libbrotlienc.a -lbrotlienc -lbrotlicommon third_party/liblcms2.a lib/libjxl_threads.a lib/libjpegli-static.a G:/MABS/local32/lib/libhwy.a -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."

I guess the desired result is not just G:/MABS/local32/lib/libhwy.a but instead G:/MABS/local32/lib/libhwy.a -lhwy in this string.

ycwan commented 11 months ago

@LigH-de

Now the error has become - FAILED: tools/cjxl.exe

20:19:40 Running git update for libjxl... 20:20:09 ┌ libjxl git .................................. [Updates found] 20:20:28 ├ Running cmake... 20:20:41 ├ Running build... Likely error (tail of the failed operation logfile): [272/277] Building CXX object lib/CMakeFiles/jxl_testlib-static.dir/jxl/test_image.cc.o ninja: build stopped: subcommand failed. [1/10] Linking CXX static library lib\libjxl_testlib-static.a [2/10] cmd.exe /C "cd /D C:\MinGW-w64\build\libjxl-git\build-64bit\tools && C:\MinGW-w64\msys64\mingw64\bin\cmake JPEGXL_ROOT_DIR=C:/MinGW-w64/build/libjxl-git -D DST=C:/MinGW-w64/build/libjxl-git/build-64bit/tools/tool_versio -P C:/MinGW-w64/build/libjxl-git/tools/git_version.cmake" [3/8] Linking CXX executable tools\cjxl.exe FAILED: tools/cjxl.exe cmd.exe /C "cd . && C:\MinGW-w64\msys64\mingw64\bin\ccache.exe g++ -fstack-protector-strong -mtune=generic -O2 -threads -fno-rtti -funwind-tables -O3 -DNDEBUG -O2 -pipe -static-libgcc -fstack-protector-strong -static-libstdc+ic -static-libgcc -static-libstdc++ -LC:/MinGW-w64/msys64/mingw64/lib -lbrotlidec -lbrotlicommon -lbrotlienc takeFiles/cjxl.dir/cjxl_main.cc.o -o tools\cjxl.exe -Wl,--out-implib,tools\libcjxl.dll.a -Wl,--major-image-versionnor-image-version,0 -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic lib/libjxl.a lib/libjxl_extras_codec-statib/libjxl_threads.a tools/libjxl_tool.a lib/libjxl.a C:/MinGW-w64/msys64/mingw64/lib/libbrotlidec.a -lbrotlidMinGW-w64/msys64/mingw64/lib/libbrotlicommon.a -LC:/MinGW-w64/msys64/mingw64/lib C:/MinGW-w64/msys64/mingw64/liotlienc.a -lbrotlienc -lbrotlicommon third_party/liblcms2.a C:/MinGW-w64/msys64/mingw64/lib/libgif.a C:/MinGsys64/mingw64/lib/libjpeg.a third_party/sjpeg/libsjpeg.a C:/MinGW-w64/msys64/mingw64/lib/libpng.a C:/MinGW-w64/mingw64/lib/libz.a C:/MinGW-w64/local64/lib/libhwy.a -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic -lkerneser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ." C:/MinGW-w64/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: tbjxl_tool.a(codec_config.cc.o):codec_config.c:(.text+0x2aa): undefined reference to `impZN3hwy16SupportedTarg collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed. build failed. Check C:/MinGW-w64/build/libjxl-git/build-64bit/ab-suite.build.log This is required for other packages, so this script will exit. 20:24:51 Creating diagnostics file...

Attach C:\MinGW-w64\build\logs.zip to the GitHub issue. Make sure the suite is up-to-date before reporting an issue. It might've been fixed already.

Try running the build again at a later time.

logs.zip ab-suite.build.log

LigH-de commented 11 months ago

Your command string does not contain -lhwy either.

LigH-de commented 10 months ago

Investigating further...

CMakeCache.txt contains some LDFLAGS entries which must be related to parts of the linker string.

Some for Brotli, to compare with: PC_BROTLICOMMON_LDFLAGS:INTERNAL=-LG:/MABS/msys64/mingw32/lib;-lbrotlicommon PC_BROTLICOMMON_STATIC_LDFLAGS:INTERNAL=-LG:/MABS/msys64/mingw32/lib;-lbrotlicommon PC_BROTLIDEC_LDFLAGS:INTERNAL=-LG:/MABS/msys64/mingw32/lib;-lbrotlidec;-LG:/MABS/msys64/mingw32/lib;-lbrotlicommon PC_BROTLIDEC_STATIC_LDFLAGS:INTERNAL=-LG:/MABS/msys64/mingw32/lib;-lbrotlidec;-LG:/MABS/msys64/mingw32/lib;-lbrotlicommon PC_BROTLIENC_LDFLAGS:INTERNAL=-LG:/MABS/msys64/mingw32/lib;-lbrotlienc;-LG:/MABS/msys64/mingw32/lib;-lbrotlicommon PC_BROTLIENC_STATIC_LDFLAGS:INTERNAL=-LG:/MABS/msys64/mingw32/lib;-lbrotlienc;-LG:/MABS/msys64/mingw32/lib;-lbrotlicommon

Now for Highway: PC_HWY_LDFLAGS:INTERNAL=-LG:/MABS/msys64/mingw32/lib;-lhwy PC_HWY_STATIC_LDFLAGS:INTERNAL=-LG:/MABS/msys64/mingw32/lib;-lhwy

Looks like the same pattern. Yet, -lhwy does not appear in the linker string, in contrast to -lbrotlidec, -lbrotlienc and -lbrotlicommon.

It is already missing in build.ninja:

# =============================================================================
# Link build statements for EXECUTABLE target cjxl

#############################################
# Link the executable tools\cjxl.exe

build tools/cjxl.exe: CXX_EXECUTABLE_LINKER__cjxl_Release tools/CMakeFiles/cjxl.dir/cjxl_main.cc.o | lib/libjxl.a lib/libjxl_extras_codec-static.a lib/libjxl_threads.a tools/libjxl_tool.a lib/libjxl.a G$:/MABS/msys64/mingw32/lib/libbrotlidec.a G$:/MABS/msys64/mingw32/lib/libbrotlicommon.a G$:/MABS/msys64/mingw32/lib/libbrotlienc.a third_party/liblcms2.a G$:/MABS/msys64/mingw32/lib/libgif.a G$:/MABS/msys64/mingw32/lib/libjpeg.a third_party/sjpeg/libsjpeg.a G$:/MABS/local32/lib/libpng.a G$:/MABS/msys64/mingw32/lib/libz.a G$:/MABS/local32/lib/libhwy.a || lib/jxl_base-obj lib/jxl_export lib/libjxl.a lib/libjxl_extras_codec-static.a lib/libjxl_threads.a third_party/liblcms2.a third_party/sjpeg/libsjpeg.a tools/libjxl_tool.a
  FLAGS = -fstack-protector-strong -mtune=generic -O2 -pipe -mthreads -fno-rtti -funwind-tables -O3 -DNDEBUG -O2
  LINK_FLAGS = -pipe -static-libgcc -fstack-protector-strong -static-libstdc++ -static -static-libgcc -static-libstdc++    -LG:/MABS/msys64/mingw32/lib -lbrotlidec -lbrotlicommon -lbrotlienc
  LINK_LIBRARIES = -Wl,-Bstatic  -lstdc++  -lpthread  -Wl,-Bdynamic  lib/libjxl.a  lib/libjxl_extras_codec-static.a  lib/libjxl_threads.a  tools/libjxl_tool.a  lib/libjxl.a  G:/MABS/msys64/mingw32/lib/libbrotlidec.a  -lbrotlidec  G:/MABS/msys64/mingw32/lib/libbrotlicommon.a  -LG:/MABS/msys64/mingw32/lib  G:/MABS/msys64/mingw32/lib/libbrotlienc.a  -lbrotlienc  -lbrotlicommon  third_party/liblcms2.a  G:/MABS/msys64/mingw32/lib/libgif.a  G:/MABS/msys64/mingw32/lib/libjpeg.a  third_party/sjpeg/libsjpeg.a  G:/MABS/local32/lib/libpng.a  G:/MABS/msys64/mingw32/lib/libz.a  G:/MABS/local32/lib/libhwy.a  -Wl,-Bstatic  -lstdc++  -lpthread  -Wl,-Bdynamic  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
  OBJECT_DIR = tools\CMakeFiles\cjxl.dir
  POST_BUILD = cd .
  PRE_LINK = cd .
  TARGET_COMPILE_PDB = tools\CMakeFiles\cjxl.dir\
  TARGET_FILE = tools\cjxl.exe
  TARGET_IMPLIB = tools\libcjxl.dll.a
  TARGET_PDB = tools\cjxl.pdb