Closed SpaceIm closed 9 months ago
Thanks for reporting the issue.
It was also an issue when compiler use C++17 (deprecated warning ) or C++20 + (not a member).
It's fixed in https://github.com/ginkgo-project/ginkgo/pull/1331, but MSVC does not update __cplusplus
like the other compilers by default (see https://learn.microsoft.com/en-us/cpp/build/reference/zc-cplusplus?view=msvc-170), which is the reason for this issue.
one quick fix on your side might work, add /Zc:__cplusplus
to CMAKE_CXX_FLAGS
.
Actually I would expect something more robust in ginkgo source code instead of forcing users to pass /Zc:__cplusplus
:
#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
Yes, it is exactly what I currently do. It will not be available in 1.7.0 release but will be in next release or later develop
Ok thanks, I'll backport this fix in ginkgo 1.7.0 recipe in conancenter (we have 1.3.0, 1.4.0 & 1.7.0, this issue occurs only in 1.7.0).
That will be great if you can also check whether this branch https://github.com/ginkgo-project/ginkgo/tree/msvc_lang work on your side without any additional flags. It should also solve the deprecated warning when using C++17 in MSVC.
Thank you very much for handling the recipe in conancenter!
Yes, it fixes this issue in 1.7.0
Though I hit another issue at the end of the build, during link of ginkgo DLL of 1.7.0:
[161/161] Linking CXX shared library lib\ginkgo.dll
FAILED: lib/ginkgo.dll lib/ginkgo.lib
cmd.exe /C "cmd.exe /C ""C:\Program Files\CMake\bin\cmake.exe" -E __create_def C:\Users\spaceim\.conan2\p\b\ginkg99344c4645a0a\b\build\Release\core\CMakeFiles\ginkgo.dir\.\exports.def C:\Users\spaceim\.conan2\p\b\ginkg99344c4645a0a\b\build\Release\core\CMakeFiles\ginkgo.dir\.\exports.def.objs && cd C:\Users\spaceim\.conan2\p\b\ginkg99344c4645a0a\b\build\Release" && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_dll --intdir=core\CMakeFiles\ginkgo.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100226~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100226~1.0\x64\mt.exe --manifests -- C:\PROGRA~1\MIB055~1\2022\COMMUN~1\VC\Tools\MSVC\1438~1.331\bin\Hostx64\x64\link.exe /nologo core\CMakeFiles\ginkgo.dir\base\array.cpp.obj core\CMakeFiles\ginkgo.dir\base\batch_multi_vector.cpp.obj core\CMakeFiles\ginkgo.dir\base\combination.cpp.obj core\CMakeFiles\ginkgo.dir\base\composition.cpp.obj core\CMakeFiles\ginkgo.dir\base\dense_cache.cpp.obj core\CMakeFiles\ginkgo.dir\base\device_matrix_data.cpp.obj core\CMakeFiles\ginkgo.dir\base\executor.cpp.obj core\CMakeFiles\ginkgo.dir\base\index_set.cpp.obj core\CMakeFiles\ginkgo.dir\base\memory.cpp.obj core\CMakeFiles\ginkgo.dir\base\mpi.cpp.obj core\CMakeFiles\ginkgo.dir\base\mtx_io.cpp.obj core\CMakeFiles\ginkgo.dir\base\perturbation.cpp.obj core\CMakeFiles\ginkgo.dir\base\timer.cpp.obj core\CMakeFiles\ginkgo.dir\base\version.cpp.obj core\CMakeFiles\ginkgo.dir\distributed\partition.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\cholesky.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\elimination_forest.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\factorization.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\ic.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\ilu.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\lu.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\par_ic.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\par_ict.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\par_ilu.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\par_ilut.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\symbolic.cpp.obj core\CMakeFiles\ginkgo.dir\log\batch_logger.cpp.obj core\CMakeFiles\ginkgo.dir\log\convergence.cpp.obj core\CMakeFiles\ginkgo.dir\log\logger.cpp.obj core\CMakeFiles\ginkgo.dir\log\performance_hint.cpp.obj core\CMakeFiles\ginkgo.dir\log\profiler_hook.cpp.obj core\CMakeFiles\ginkgo.dir\log\profiler_hook_summary.cpp.obj core\CMakeFiles\ginkgo.dir\log\profiler_hook_summary_writer.cpp.obj core\CMakeFiles\ginkgo.dir\log\tau.cpp.obj core\CMakeFiles\ginkgo.dir\log\vtune.cpp.obj core\CMakeFiles\ginkgo.dir\log\record.cpp.obj core\CMakeFiles\ginkgo.dir\log\stream.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\batch_dense.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\batch_ell.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\batch_identity.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\coo.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\csr.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\dense.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\diagonal.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\ell.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\fbcsr.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\fft.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\hybrid.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\identity.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\permutation.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\row_gatherer.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\scaled_permutation.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\sellp.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\sparsity_csr.cpp.obj core\CMakeFiles\ginkgo.dir\multigrid\pgm.cpp.obj core\CMakeFiles\ginkgo.dir\multigrid\fixed_coarsening.cpp.obj core\CMakeFiles\ginkgo.dir\preconditioner\isai.cpp.obj core\CMakeFiles\ginkgo.dir\preconditioner\jacobi.cpp.obj core\CMakeFiles\ginkgo.dir\reorder\amd.cpp.obj core\CMakeFiles\ginkgo.dir\reorder\mc64.cpp.obj core\CMakeFiles\ginkgo.dir\reorder\rcm.cpp.obj core\CMakeFiles\ginkgo.dir\reorder\scaled_reordered.cpp.obj core\CMakeFiles\ginkgo.dir\solver\batch_bicgstab.cpp.obj core\CMakeFiles\ginkgo.dir\solver\bicg.cpp.obj core\CMakeFiles\ginkgo.dir\solver\bicgstab.cpp.obj core\CMakeFiles\ginkgo.dir\solver\cb_gmres.cpp.obj core\CMakeFiles\ginkgo.dir\solver\cg.cpp.obj core\CMakeFiles\ginkgo.dir\solver\cgs.cpp.obj core\CMakeFiles\ginkgo.dir\solver\direct.cpp.obj core\CMakeFiles\ginkgo.dir\solver\fcg.cpp.obj core\CMakeFiles\ginkgo.dir\solver\gcr.cpp.obj core\CMakeFiles\ginkgo.dir\solver\gmres.cpp.obj core\CMakeFiles\ginkgo.dir\solver\idr.cpp.obj core\CMakeFiles\ginkgo.dir\solver\ir.cpp.obj core\CMakeFiles\ginkgo.dir\solver\lower_trs.cpp.obj core\CMakeFiles\ginkgo.dir\solver\multigrid.cpp.obj core\CMakeFiles\ginkgo.dir\solver\upper_trs.cpp.obj core\CMakeFiles\ginkgo.dir\stop\combined.cpp.obj core\CMakeFiles\ginkgo.dir\stop\criterion.cpp.obj core\CMakeFiles\ginkgo.dir\stop\iteration.cpp.obj core\CMakeFiles\ginkgo.dir\stop\residual_norm.cpp.obj core\CMakeFiles\ginkgo.dir\stop\time.cpp.obj core\CMakeFiles\ginkgo.dir\__\third_party\SuiteSparse\wrapper32.cpp.obj core\CMakeFiles\ginkgo.dir\__\third_party\SuiteSparse\wrapper64.cpp.obj /out:lib\ginkgo.dll /implib:lib\ginkgo.lib /pdb:lib\ginkgo.pdb /dll /version:0.0 /machine:x64 /INCREMENTAL:NO /DEF:core\CMakeFiles\ginkgo.dir\.\exports.def lib\ginkgo_omp.lib lib\ginkgo_cuda.lib lib\ginkgo_reference.lib lib\ginkgo_hip.lib lib\ginkgo_dpcpp.lib lib\ginkgo_device.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
LINK: command "C:\PROGRA~1\MIB055~1\2022\COMMUN~1\VC\Tools\MSVC\1438~1.331\bin\Hostx64\x64\link.exe /nologo core\CMakeFiles\ginkgo.dir\base\array.cpp.obj core\CMakeFiles\ginkgo.dir\base\batch_multi_vector.cpp.obj core\CMakeFiles\ginkgo.dir\base\combination.cpp.obj core\CMakeFiles\ginkgo.dir\base\composition.cpp.obj core\CMakeFiles\ginkgo.dir\base\dense_cache.cpp.obj core\CMakeFiles\ginkgo.dir\base\device_matrix_data.cpp.obj core\CMakeFiles\ginkgo.dir\base\executor.cpp.obj core\CMakeFiles\ginkgo.dir\base\index_set.cpp.obj core\CMakeFiles\ginkgo.dir\base\memory.cpp.obj core\CMakeFiles\ginkgo.dir\base\mpi.cpp.obj core\CMakeFiles\ginkgo.dir\base\mtx_io.cpp.obj core\CMakeFiles\ginkgo.dir\base\perturbation.cpp.obj core\CMakeFiles\ginkgo.dir\base\timer.cpp.obj core\CMakeFiles\ginkgo.dir\base\version.cpp.obj core\CMakeFiles\ginkgo.dir\distributed\partition.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\cholesky.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\elimination_forest.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\factorization.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\ic.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\ilu.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\lu.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\par_ic.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\par_ict.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\par_ilu.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\par_ilut.cpp.obj core\CMakeFiles\ginkgo.dir\factorization\symbolic.cpp.obj core\CMakeFiles\ginkgo.dir\log\batch_logger.cpp.obj core\CMakeFiles\ginkgo.dir\log\convergence.cpp.obj core\CMakeFiles\ginkgo.dir\log\logger.cpp.obj core\CMakeFiles\ginkgo.dir\log\performance_hint.cpp.obj core\CMakeFiles\ginkgo.dir\log\profiler_hook.cpp.obj core\CMakeFiles\ginkgo.dir\log\profiler_hook_summary.cpp.obj core\CMakeFiles\ginkgo.dir\log\profiler_hook_summary_writer.cpp.obj core\CMakeFiles\ginkgo.dir\log\tau.cpp.obj core\CMakeFiles\ginkgo.dir\log\vtune.cpp.obj core\CMakeFiles\ginkgo.dir\log\record.cpp.obj core\CMakeFiles\ginkgo.dir\log\stream.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\batch_dense.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\batch_ell.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\batch_identity.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\coo.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\csr.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\dense.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\diagonal.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\ell.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\fbcsr.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\fft.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\hybrid.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\identity.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\permutation.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\row_gatherer.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\scaled_permutation.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\sellp.cpp.obj core\CMakeFiles\ginkgo.dir\matrix\sparsity_csr.cpp.obj core\CMakeFiles\ginkgo.dir\multigrid\pgm.cpp.obj core\CMakeFiles\ginkgo.dir\multigrid\fixed_coarsening.cpp.obj core\CMakeFiles\ginkgo.dir\preconditioner\isai.cpp.obj core\CMakeFiles\ginkgo.dir\preconditioner\jacobi.cpp.obj core\CMakeFiles\ginkgo.dir\reorder\amd.cpp.obj core\CMakeFiles\ginkgo.dir\reorder\mc64.cpp.obj core\CMakeFiles\ginkgo.dir\reorder\rcm.cpp.obj core\CMakeFiles\ginkgo.dir\reorder\scaled_reordered.cpp.obj core\CMakeFiles\ginkgo.dir\solver\batch_bicgstab.cpp.obj core\CMakeFiles\ginkgo.dir\solver\bicg.cpp.obj core\CMakeFiles\ginkgo.dir\solver\bicgstab.cpp.obj core\CMakeFiles\ginkgo.dir\solver\cb_gmres.cpp.obj core\CMakeFiles\ginkgo.dir\solver\cg.cpp.obj core\CMakeFiles\ginkgo.dir\solver\cgs.cpp.obj core\CMakeFiles\ginkgo.dir\solver\direct.cpp.obj core\CMakeFiles\ginkgo.dir\solver\fcg.cpp.obj core\CMakeFiles\ginkgo.dir\solver\gcr.cpp.obj core\CMakeFiles\ginkgo.dir\solver\gmres.cpp.obj core\CMakeFiles\ginkgo.dir\solver\idr.cpp.obj core\CMakeFiles\ginkgo.dir\solver\ir.cpp.obj core\CMakeFiles\ginkgo.dir\solver\lower_trs.cpp.obj core\CMakeFiles\ginkgo.dir\solver\multigrid.cpp.obj core\CMakeFiles\ginkgo.dir\solver\upper_trs.cpp.obj core\CMakeFiles\ginkgo.dir\stop\combined.cpp.obj core\CMakeFiles\ginkgo.dir\stop\criterion.cpp.obj core\CMakeFiles\ginkgo.dir\stop\iteration.cpp.obj core\CMakeFiles\ginkgo.dir\stop\residual_norm.cpp.obj core\CMakeFiles\ginkgo.dir\stop\time.cpp.obj core\CMakeFiles\ginkgo.dir\__\third_party\SuiteSparse\wrapper32.cpp.obj core\CMakeFiles\ginkgo.dir\__\third_party\SuiteSparse\wrapper64.cpp.obj /out:lib\ginkgo.dll /implib:lib\ginkgo.lib /pdb:lib\ginkgo.pdb /dll /version:0.0 /machine:x64 /INCREMENTAL:NO /DEF:core\CMakeFiles\ginkgo.dir\.\exports.def lib\ginkgo_omp.lib lib\ginkgo_cuda.lib lib\ginkgo_reference.lib lib\ginkgo_hip.lib lib\ginkgo_dpcpp.lib lib\ginkgo_device.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 1189) with the following output:
LINK : fatal error LNK1189: library limit of 65535 objects exceeded
ninja: build stopped: subcommand failed.
I guess it's a consequence of CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
instead of proper fine-grained export of public symbols with __declspec(dllexport)
.
This is a long-standing issue we can't truly fix without an interface break/major release. See #715. This is Ninja-related, see https://github.com/microsoft/vcpkg/pull/34280#discussion_r1351515284 In vcpkg
, we simply disable shared builds
Ok I see. I've proposed a workaround in conancenter recipe: force MSBuild if msvc & shared for ginkgo>=1.5.0 if generator asked by user is Ninja: https://github.com/conan-io/conan-center-index/pull/21626/commits/cda67433a14a6a8911d442ed54916a7e8224f4db
Fixed by #1496, the rest is a packaging fix
ginkgo 1.7.0 fails to compile with Visual Studio 2022 and C++20
Build log: