Mingw compile error for vtkm

Dear all. I compile the VTK with vtkm. I got the following compile errors. How to compile it correct with vtkm?

D:/Msys64/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/11.2.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\AcceleratorsVTKmFilters.dir/objects.a(vtkmGradient.cxx.obj):vtkmGradient.c:(.text$_ZN4vtkm6filter11FilterFieldINS0_8GradientEE19PrepareForExecutionINS0_13PolicyDefaultEEENS_4cont7DataSetERKS7_RKNS6_5FieldENS0_10PolicyBaseIT_EE[_ZN4vtkm6filter11FilterFieldINS0_8GradientEE19PrepareForExecutionINS0_13PolicyDefaultEEENS_4cont7DataSetERKS7_RKNS6_5FieldENS0_10PolicyBaseIT_EE]+0x408): undefined reference to vtkm::cont::DataSet vtkm::filter::Gradient::DoExecute<vtkm::Vec<double, 3>, vtkm::cont::StorageTagSOA, vtkm::filter::PolicyDefault>(vtkm::cont::DataSet const&, vtkm::cont::ArrayHandle<vtkm::Vec<double, 3>, vtkm::cont::StorageTagSOA> const&, vtkm::filter::FieldMetadata const&, vtkm::filter::PolicyBase<vtkm::filter::PolicyDefault>)' D:/Msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\AcceleratorsVTKmFilters.dir/objects.a(vtkmGradient.cxx.obj):vtkmGradient.c:(.text$_ZN4vtkm6filter11FilterFieldINS0_8GradientEE19PrepareForExecutionINS0_13PolicyDefaultEEENS_4cont7DataSetERKS7_RKNS6_5FieldENS0_10PolicyBaseIT_EE[_ZN4vtkm6filter11FilterFieldINS0_8GradientEE19PrepareForExecutionINS0_13PolicyDefaultEEENS_4cont7DataSetERKS7_RKNS6_5FieldENS0_10PolicyBaseIT_EE]+0x478): undefined reference to vtkm::cont::DataSet vtkm::filter::Gradient::DoExecute<vtkm::Vec<double, 3>, vtkm::cont::StorageTagBasic, vtkm::filter::PolicyDefault>(vtkm::cont::DataSet const&, vtkm::cont::ArrayHandle<vtkm::Vec<double, 3>, vtkm::cont::StorageTagBasic> const&, vtkm::filter::FieldMetadata const&, vtkm::filter::PolicyBasevtkm::filter::PolicyDefault)’
D:/Msys64/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/11.2.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\AcceleratorsVTKmFilters.dir/objects.a(vtkmGradient.cxx.obj):vtkmGradient.c:(.text$_ZN4vtkm6filter6FilterINS0_8GradientEE7ExecuteERKNS_4cont7DataSetE[_ZN4vtkm6filter6FilterINS0_8GradientEE7ExecuteERKNS_4cont7DataSetE]+0xb3b): undefined reference to vtkm::cont::DataSet vtkm::filter::Gradient::DoExecute<vtkm::Vec<double, 3>, vtkm::cont::StorageTagSOA, vtkm::filter::PolicyDefault>(vtkm::cont::DataSet const&, vtkm::cont::ArrayHandle<vtkm::Vec<double, 3>, vtkm::cont::StorageTagSOA> const&, vtkm::filter::FieldMetadata const&, vtkm::filter::PolicyBase<vtkm::filter::PolicyDefault>)' D:/Msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\AcceleratorsVTKmFilters.dir/objects.a(vtkmGradient.cxx.obj):vtkmGradient.c:(.text$_ZN4vtkm6filter6FilterINS0_8GradientEE7ExecuteERKNS_4cont7DataSetE[_ZN4vtkm6filter6FilterINS0_8GradientEE7ExecuteERKNS_4cont7DataSetE]+0xba9): undefined reference to vtkm::cont::DataSet vtkm::filter::Gradient::DoExecute<vtkm::Vec<double, 3>, vtkm::cont::StorageTagBasic, vtkm::filter::PolicyDefault>(vtkm::cont::DataSet const&, vtkm::cont::ArrayHandle<vtkm::Vec<double, 3>, vtkm::cont::StorageTagBasic> const&, vtkm::filter::FieldMetadata const&, vtkm::filter::PolicyBasevtkm::filter::PolicyDefault)’
collect2.exe: error: ld returned 1 exit status
mingw32-make[2]: *** [Accelerators\Vtkm\Filters\CMakeFiles\AcceleratorsVTKmFilters.dir\build.make:499: bin/libvtkAcceleratorsVTKmFilters-9.1.dll] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:16044: Accelerators/Vtkm/Filters/CMakeFiles/AcceleratorsVTKmFilters.dir/all] Error 2
mingw32-make: *** [Makefile:135: all] Error 2

I don’t think VTK-m is well-tested with MinGW (not that VTK is either).

@jschueller Have you managed to compile VTK-m with MinGW?

Cc: @vbolea

No, I always disable it.

You will probably run into many issues at all stages (development, build, run, test, package) if you try to use mingw instead of a Visual Studio build toolset. With the help of CMake you can develop code that is compiled using the best supported build toolset on each platform.

let me disagree. vtk (and paraview) works generally fine with mingw except for minor compilation problems from time to time. that’s understandable because upstream does not support it.

I believe you that things are expected to mostly work if you use mingw for development on Windows, but things are expected to work if you use MSVC because magnitudes more people use it (and so any errors are found and fixed sooner, more convenience features are available, etc.).

Yes, this is the difference between “supported” and “patches accepted”. Julien is a valued contributor by verifying MinGW support for VTK and ParaView that we just do not have the resources allocated to continually verify.

1 Like

I add one new file in ThirdParty\vtkm\vtkvtkm\vtk-m\vtkm\filter. I named it GradientPoints.cxx. Then the vtkm can be compiled. It’s great.

The code is:

// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the above copyright notice for more information.
//============================================================================

#ifndef vtk_m_filter_Gradient_point_cxx
#define vtk_m_filter_Gradient_point_cxx

#include <vtkm/filter/Gradient.h>
#include <vtkm/filter/Gradient.hxx>

namespace vtkm
{
namespace filter
{
template VTKM_FILTER_GRADIENT_TEMPLATE_EXPORT vtkm::cont::DataSet Gradient::DoExecute(
const vtkm::cont::DataSet&,
const vtkm::cont::ArrayHandle<vtkm::Vec<double, 3>, vtkm::cont::StorageTagBasic>&,
const vtkm::filter::FieldMetadata&,
vtkm::filter::PolicyBasevtkm::filter::PolicyDefault);

template VTKM_FILTER_GRADIENT_TEMPLATE_EXPORT vtkm::cont::DataSet Gradient::DoExecute(
const vtkm::cont::DataSet&,
const vtkm::cont::ArrayHandle<vtkm::Vec<double, 3>, vtkm::cont::StorageTagSOA>&,
const vtkm::filter::FieldMetadata&,
vtkm::filter::PolicyBasevtkm::filter::PolicyDefault);
}
}

#endif