objectcomputing / mFAST

A FAST (FIX Adapted for STreaming) encoder/decoder
http://objectcomputing.github.io/mFAST
BSD 3-Clause "New" or "Revised" License
224 stars 112 forks source link

Unable to builb with boost_1.83.0 and ucrt64(mingw64) #129

Closed maxizoDev closed 1 year ago

maxizoDev commented 1 year ago

I am trying to compile mFAST library on my Windows 10 system.

I am using VS Code as IDE, and GCC(ucrt64) compiler from MSYS64 to build the library.

I have downloaded and unpacked unix version of boost from boost.org.

Then, in the build sub0directory, I run cmake using command cmake .. -G "Unix Makefiles" -DBOOST_ROOT=C:\unix_Boost_1.83.0\boost_1_83_0 . The output is:

--The CXX compiler identification is GNU 13.2.0`
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/ucrt64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Boost: C:/unix_Boost_1.83.0/boost_1_83_0 (found suitable version "1.83.0", minimum required is "1.56.0")

-- CMAKE_COMMAND: C:/Program Files/CMake/bin/cmake.exe
-- CMAKE_SYSTEM: Windows-10.0.19045
-- CMAKE_SYSTEM_PROCESSOR: AMD64
-- CMAKE_CXX_COMPILER: C:/msys64/ucrt64/bin/c++.exe
-- CMAKE_CXX_FLAGS:
-- CMAKE_BUILD_TYPE: Debug
-- BUILD_SHARED_LIBS: OFF
-- BUILD_TESTS: ON
-- BUILD_EXAMPLES: ON
-- BUILD_PACKAGES: ON

-- Configuring done
-- Generating done
-- Build files have been written to: D:/mFAST/build

After that, make output is:

[  1%] Building CXX object src/mfast/CMakeFiles/mfast_static.dir/allocator.cpp.obj
[  2%] Building CXX object src/mfast/CMakeFiles/mfast_static.dir/arena_allocator.cpp.obj
[  2%] Building CXX object src/mfast/CMakeFiles/mfast_static.dir/boolean_ref.cpp.obj
[  3%] Building CXX object src/mfast/CMakeFiles/mfast_static.dir/decimal_ref.cpp.obj
D:/mFAST/src/mfast/decimal_ref.cpp:24:15: error: template-id 'hash_combine<boost::multiprecision::backends::cpp_dec_float<18>::enum_fpclass_type>' for 
'void boost::hash_combine(long unsigned int&, const multiprecision::backends::cpp_dec_float<18>::enum_fpclass_type&)' does not match any template declaration
   24 | template void boost::hash_combine<boost::multiprecision::backends::cpp_dec_float<18u, int, void>::enum_fpclass_type>(unsigned long&, boost::multiprecision::backends::cpp_dec_float<18u, int, void>::enum_fpclass_type const&);
      |               ^~~~~
In file included from C:/win_Boost_1.83.0/boost_1_83_0/boost/functional/hash.hpp:6,
                 from D:/mFAST/src/mfast/decimal_ref.cpp:18:
C:/win_Boost_1.83.0/boost_1_83_0/boost/container_hash/hash.hpp:561:17: note: candidate is: 'template<class T> void boost::hash_combine(std::size_t&, const 
T&)'
  561 |     inline void hash_combine( std::size_t& seed, T const& v )
      |                 ^~~~~~~~~~~~
D:/mFAST/src/mfast/decimal_ref.cpp:26:15: error: template-id 'hash_combine<bool>' for 'void boost::hash_combine(long unsigned int&, const bool&)' does 
not match any template declaration
   26 | template void boost::hash_combine<bool>(unsigned long&, bool const&);
      |               ^~~~~
C:/win_Boost_1.83.0/boost_1_83_0/boost/container_hash/hash.hpp:561:17: note: candidate is: 'template<class T> void boost::hash_combine(std::size_t&, const 
T&)'
  561 |     inline void hash_combine( std::size_t& seed, T const& v )
      |                 ^~~~~~~~~~~~
D:/mFAST/src/mfast/decimal_ref.cpp:27:15: error: template-id 'hash_combine<int>' for 'void boost::hash_combine(long unsigned int&, const int&)' does not match any template declaration
   27 | template void boost::hash_combine<int>(unsigned long&, int const&);
      |               ^~~~~
C:/win_Boost_1.83.0/boost_1_83_0/boost/container_hash/hash.hpp:561:17: note: candidate is: 'template<class T> void boost::hash_combine(std::size_t&, const 
T&)'
  561 |     inline void hash_combine( std::size_t& seed, T const& v )
      |                 ^~~~~~~~~~~~
D:/mFAST/src/mfast/decimal_ref.cpp:28:15: error: template-id 'hash_combine<unsigned int>' for 'void boost::hash_combine(long unsigned int&, const unsigned int&)' does not match any template declaration
   28 | template void boost::hash_combine<unsigned int>(unsigned long&, unsigned int const&);
      |               ^~~~~
C:/win_Boost_1.83.0/boost_1_83_0/boost/container_hash/hash.hpp:561:17: note: candidate is: 'template<class T> void boost::hash_combine(std::size_t&, const 
T&)'
  561 |     inline void hash_combine( std::size_t& seed, T const& v )
      |                 ^~~~~~~~~~~~
make[2]: *** [src/mfast/CMakeFiles/mfast_static.dir/build.make:122: src/mfast/CMakeFiles/mfast_static.dir/decimal_ref.cpp.obj] Error 1
make[1]: *** [CMakeFiles/Makefile2:311: src/mfast/CMakeFiles/mfast_static.dir/all] Error 2
make: *** [Makefile:166: all] Error 2

Please help on how to resolve this error.

maxizoDev commented 1 year ago

I was able to build the project successfully in one go on an Ubuntu system by following the steps mentioned in the Wiki.

maxizoDev commented 1 year ago

Ditched mingw64 and switched to MSVC. Built fine after some tinkering.