Build failure on windows with LLVM
Summary
The build fails on windows with missing symbols at the link stage.
Environment
- Operating System : Windows
- Architecture : x64
- Eigen Version : master
- Compiler Version : clang-cl and flang 22 (git main)
- Compile Flags : cmake release build type
- Vector Extension : cpu supports avx2
Steps to reproduce
- Clone the eigen repo.
- Build LLVM from source (since flang isn't distributed in the windows release) with flang enabled.
- configure with cmake. set C and CXX compiler to clang-cl, Fortran compiler to flang. Build type to release, and build_shared_libs to on.(not sure if it only happens with shared libs but that is what I ran)
What is the current bug behavior?
Doesn't link the eigen_lapack lib.
What is the expected correct behavior?
The build succeeds.
Warning Messages
[1/1] Linking CXX shared library lapack\eigen_lapack.dll
FAILED: [code=4294967295] lapack/eigen_lapack.dll lapack/eigen_lapack.lib
C:\WINDOWS\system32\cmd.exe /C "cd . && "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_dll --msvc-ver=1950 --intdir=lapack\CMakeFiles\eigen_lapack.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\rc.exe --mt=E:\LLVM\bin\llvm-mt.exe --manifests -- E:\LLVM\bin\lld-link.exe /nologo lapack\CMakeFiles\eigen_lapack.dir\dsecnd_INT_CPU_TIME.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\second_INT_CPU_TIME.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\single.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\double.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\complex_single.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\complex_double.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\__\blas\xerbla.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlarft.f.obj lapack\CMakeFiles\eigen_lapack.dir\clarft.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlarft.f.obj lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlarfb.f.obj lapack\CMakeFiles\eigen_lapack.dir\slarfg.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlarfg.f.obj lapack\CMakeFiles\eigen_lapack.dir\clarfg.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlarfg.f.obj lapack\CMakeFiles\eigen_lapack.dir\slarf.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlarf.f.obj lapack\CMakeFiles\eigen_lapack.dir\clarf.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlarf.f.obj lapack\CMakeFiles\eigen_lapack.dir\sladiv.f.obj lapack\CMakeFiles\eigen_lapack.dir\dladiv.f.obj lapack\CMakeFiles\eigen_lapack.dir\cladiv.f.obj lapack\CMakeFiles\eigen_lapack.dir\zladiv.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilaslr.f.obj lapack\CMakeFiles\eigen_lapack.dir\iladlr.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilaclr.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilazlr.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilaslc.f.obj lapack\CMakeFiles\eigen_lapack.dir\iladlc.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilaclc.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilazlc.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlapy2.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlapy3.f.obj lapack\CMakeFiles\eigen_lapack.dir\slapy2.f.obj lapack\CMakeFiles\eigen_lapack.dir\slapy3.f.obj lapack\CMakeFiles\eigen_lapack.dir\clacgv.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlacgv.f.obj lapack\CMakeFiles\eigen_lapack.dir\slamch.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlamch.f.obj /out:lapack\eigen_lapack.dll /implib:lapack\eigen_lapack.lib /pdb:lapack\eigen_lapack.pdb /dll /version:0.0 /machine:x64 /INCREMENTAL:NO -LIBPATH:E:\LLVM\lib\clang\22\lib\windows -LIBPATH:E:\LLVM\lib -LIBPATH:E:\LLVM\lib\clang\22\lib\x86_64-pc-windows-msvc blas\eigen_blas.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
LINK: command "E:\LLVM\bin\lld-link.exe /nologo lapack\CMakeFiles\eigen_lapack.dir\dsecnd_INT_CPU_TIME.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\second_INT_CPU_TIME.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\single.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\double.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\complex_single.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\complex_double.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\__\blas\xerbla.cpp.obj lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlarft.f.obj lapack\CMakeFiles\eigen_lapack.dir\clarft.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlarft.f.obj lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlarfb.f.obj lapack\CMakeFiles\eigen_lapack.dir\slarfg.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlarfg.f.obj lapack\CMakeFiles\eigen_lapack.dir\clarfg.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlarfg.f.obj lapack\CMakeFiles\eigen_lapack.dir\slarf.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlarf.f.obj lapack\CMakeFiles\eigen_lapack.dir\clarf.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlarf.f.obj lapack\CMakeFiles\eigen_lapack.dir\sladiv.f.obj lapack\CMakeFiles\eigen_lapack.dir\dladiv.f.obj lapack\CMakeFiles\eigen_lapack.dir\cladiv.f.obj lapack\CMakeFiles\eigen_lapack.dir\zladiv.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilaslr.f.obj lapack\CMakeFiles\eigen_lapack.dir\iladlr.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilaclr.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilazlr.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilaslc.f.obj lapack\CMakeFiles\eigen_lapack.dir\iladlc.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilaclc.f.obj lapack\CMakeFiles\eigen_lapack.dir\ilazlc.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlapy2.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlapy3.f.obj lapack\CMakeFiles\eigen_lapack.dir\slapy2.f.obj lapack\CMakeFiles\eigen_lapack.dir\slapy3.f.obj lapack\CMakeFiles\eigen_lapack.dir\clacgv.f.obj lapack\CMakeFiles\eigen_lapack.dir\zlacgv.f.obj lapack\CMakeFiles\eigen_lapack.dir\slamch.f.obj lapack\CMakeFiles\eigen_lapack.dir\dlamch.f.obj /out:lapack\eigen_lapack.dll /implib:lapack\eigen_lapack.lib /pdb:lapack\eigen_lapack.pdb /dll /version:0.0 /machine:x64 /INCREMENTAL:NO -LIBPATH:E:\LLVM\lib\clang\22\lib\windows -LIBPATH:E:\LLVM\lib -LIBPATH:E:\LLVM\lib\clang\22\lib\x86_64-pc-windows-msvc blas\eigen_blas.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST:EMBED,ID=2" failed (exit code 1) with the following output:
lld-link: error: undefined symbol: lsame_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj:(slarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj:(slarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj:(slarft_)
>>> referenced 85 more times
lld-link: error: undefined symbol: sgemv_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj:(slarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj:(slarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj:(slarft_)
>>> referenced 3 more times
lld-link: error: undefined symbol: strmv_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj:(slarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarft.f.obj:(slarft_)
lld-link: error: undefined symbol: dgemv_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarft.f.obj:(dlarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarft.f.obj:(dlarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarft.f.obj:(dlarft_)
>>> referenced 3 more times
lld-link: error: undefined symbol: dtrmv_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarft.f.obj:(dlarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarft.f.obj:(dlarft_)
lld-link: error: undefined symbol: cgemv_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarft.f.obj:(clarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarft.f.obj:(clarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarf.f.obj:(clarf_)
>>> referenced 1 more times
lld-link: error: undefined symbol: cgemm_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarft.f.obj:(clarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarft.f.obj:(clarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj:(clarfb_)
>>> referenced 15 more times
lld-link: error: undefined symbol: ctrmv_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarft.f.obj:(clarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarft.f.obj:(clarft_)
lld-link: error: undefined symbol: zgemv_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarft.f.obj:(zlarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarft.f.obj:(zlarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarf.f.obj:(zlarf_)
>>> referenced 1 more times
lld-link: error: undefined symbol: zgemm_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarft.f.obj:(zlarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarft.f.obj:(zlarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarfb.f.obj:(zlarfb_)
>>> referenced 15 more times
lld-link: error: undefined symbol: ztrmv_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarft.f.obj:(zlarft_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarft.f.obj:(zlarft_)
lld-link: error: undefined symbol: scopy_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced 5 more times
lld-link: error: undefined symbol: strmm_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced 21 more times
lld-link: error: undefined symbol: sgemm_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\slarfb.f.obj:(slarfb_)
>>> referenced 13 more times
lld-link: error: undefined symbol: dcopy_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced 5 more times
lld-link: error: undefined symbol: dtrmm_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced 21 more times
lld-link: error: undefined symbol: dgemm_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\dlarfb.f.obj:(dlarfb_)
>>> referenced 13 more times
lld-link: error: undefined symbol: ccopy_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj:(clarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj:(clarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj:(clarfb_)
>>> referenced 5 more times
lld-link: error: undefined symbol: ctrmm_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj:(clarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj:(clarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\clarfb.f.obj:(clarfb_)
>>> referenced 21 more times
lld-link: error: undefined symbol: zcopy_
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarfb.f.obj:(zlarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarfb.f.obj:(zlarfb_)
>>> referenced by lapack\CMakeFiles\eigen_lapack.dir\zlarfb.f.obj:(zlarfb_)
>>> referenced 5 more times
lld-link: error: too many errors emitted, stopping now (use /errorlimit:0 to see all errors)
ninja: build stopped: subcommand failed.
-
Have a plan to fix this issue.