hosseinmoein / DataFrame

C++ DataFrame for statistical, Financial, and ML analysis -- in modern C++ using native types and contiguous memory storage
https://hosseinmoein.github.io/DataFrame/
BSD 3-Clause "New" or "Revised" License
2.44k stars 310 forks source link

Error compiling on Linux x86_64 with g++ 14.0.1 or Clang 17.0.6 #283

Closed dannyvankooten closed 7 months ago

dannyvankooten commented 7 months ago
$ g++ --version
g++ (GCC) 14.0.1 20240121 (experimental)

$ cmake -DCMAKE_BUILD_TYPE=Release -DHMDF_BENCHMARKS=1 -DHMDF_EXAMPLES=1 -DHMDF_TESTING=1 ..
-- The CXX compiler identification is GNU 14.0.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/danny/gcc-latest/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for clock_gettime
-- Looking for clock_gettime - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Configuring done
-- Generating done
-- Build files have been written to: /home/danny/Code/2024/DataFrame/Release

$ make
[  2%] Building CXX object CMakeFiles/DataFrame.dir/src/Utils/DateTime.cc.o
In file included from /home/danny/Code/2024/DataFrame/include/DataFrame/Utils/DateTime.h:33,                                                   
                 from /home/danny/Code/2024/DataFrame/src/Utils/DateTime.cc:30:                                                                
/home/danny/Code/2024/DataFrame/include/DataFrame/Utils/FixedSizeString.h: In member function ‘hmdf::VirtualString& hmdf::VirtualString::ncopy(const_pointer, size_type)’:                                                                                                                    
/home/danny/Code/2024/DataFrame/include/DataFrame/Utils/FixedSizeString.h:42:61: error: ‘abort’ was not declared in this scope                 
   42 | #define snprintf_nowarn(...) (::snprintf(__VA_ARGS__) < 0 ? abort() : (void)0)                                                         
      |                                                             ^~~~~                                                                      
/home/danny/Code/2024/DataFrame/include/DataFrame/Utils/FixedSizeString.h:100:9: note: in expansion of macro ‘snprintf_nowarn’                 
  100 |         snprintf_nowarn(string_, len, "%s", rhs);                                                                                      
      |         ^~~~~~~~~~~~~~~                                                                                                                
/home/danny/Code/2024/DataFrame/include/DataFrame/Utils/FixedSizeString.h:36:1: note: ‘abort’ is defined in header ‘<cstdlib>’; this is probably fixable by adding ‘#include <cstdlib>’                                                                                                       
   35 | #include <functional>
  +++ |+#include <cstdlib>                                                                                                                     
   36 | 

Alternatively, when trying Clang:

$ clang-17 --version
Debian clang version 17.0.6 (++20231208085813+6009708b4367-1~exp1~20231208085906.81)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

$ CXX=clang-17 cmake -DCMAKE_BUILD_TYPE=Release -DHMDF_BENCHMARKS=1 -DHMDF_EXAMPLES=1 -DHMDF_TESTING=1 ..
-- The CXX compiler identification is Clang 17.0.6
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/clang-17 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for clock_gettime
-- Looking for clock_gettime - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Configuring done
-- Generating done
-- Build files have been written to: /home/danny/Code/2024/DataFrame/Release

$ make
[  2%] Building CXX object CMakeFiles/DataFrame.dir/src/Utils/DateTime.cc.o
[  4%] Linking CXX static library libDataFrame.a
[  4%] Built target DataFrame
[  6%] Generating ../bin/data/sample_data.json
[  6%] Built target hmdf_copy_sample_data.json
[  8%] Generating ../bin/data/sample_data_dt_index.csv
[  8%] Built target hmdf_copy_sample_data_dt_index.csv
[ 10%] Generating ../bin/data/sample_data_string_index.csv
[ 10%] Built target hmdf_copy_sample_data_string_index.csv
[ 12%] Generating ../bin/data/sample_data.csv
[ 12%] Built target hmdf_copy_sample_data.csv
[ 14%] Building CXX object test/CMakeFiles/dataframe_tester.dir/dataframe_tester.cc.o
In file included from /home/danny/Code/2024/DataFrame/test/dataframe_tester.cc:28:
In file included from /home/danny/Code/2024/DataFrame/include/DataFrame/DataFrame.h:32:
In file included from /home/danny/Code/2024/DataFrame/include/DataFrame/DataFrameStatsVisitors.h:33:
In file included from /home/danny/Code/2024/DataFrame/include/DataFrame/Internals/DataFrame_standalone.tcc:33:
In file included from /home/danny/Code/2024/DataFrame/include/DataFrame/Utils/Threads/ThreadGranularity.h:32:
In file included from /home/danny/Code/2024/DataFrame/include/DataFrame/Utils/Threads/ThreadPool.h:186:
/home/danny/Code/2024/DataFrame/include/DataFrame/Utils/Threads/ThreadPool.tcc:78:34: warning: absolute value function 'abs' given an argument of type 'size_type' (aka 'long') but has parameter of type 'int' which may cause truncation of value [-Wabsolute-value]
   78 |         const size_type shutys { ::abs(thr_num) };
      |                                  ^
/home/danny/Code/2024/DataFrame/include/DataFrame/Utils/Threads/ThreadPool.tcc:78:34: note: use function 'std::abs' instead
   78 |         const size_type shutys { ::abs(thr_num) };
      |                                  ^~~~~
      |                                  std::abs
In file included from /home/danny/Code/2024/DataFrame/test/dataframe_tester.cc:28:
In file included from /home/danny/Code/2024/DataFrame/include/DataFrame/DataFrame.h:4326:
/home/danny/Code/2024/DataFrame/include/DataFrame/Internals/DataFrame.tcc:512:43: error: no member named 'zip' in namespace 'std::ranges::views'
  512 |     auto        zip = std::ranges::views::zip(*vec, sorting_idxs);
      |                       ~~~~~~~~~~~~~~~~~~~~^
...
1 warning and 10 errors generated.
make[2]: *** [test/CMakeFiles/dataframe_tester.dir/build.make:76: test/CMakeFiles/dataframe_tester.dir/dataframe_tester.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:208: test/CMakeFiles/dataframe_tester.dir/all] Error 2
make: *** [Makefile:146: all] Error 2
hosseinmoein commented 7 months ago

your clang compiler is not C++23 conformant. I will look into the Linux problem. it is missing a header file which I am surprised because it compiles on Ubuntu

hosseinmoein commented 7 months ago

These are all fixed in master. If you upgrade your clang compiler to c++23, all should work

dannyvankooten commented 7 months ago

Can confirm that it compiles without issues now using gcc 14.0.1. :+1: