jedeschaud / ct_icp

CT-ICP: Continuous-Time LiDAR Odometry
MIT License
737 stars 126 forks source link

Build fails on debian #65

Open fghoussen opened 1 year ago

fghoussen commented 1 year ago

Reporting that, superbuild is OK, but, build fails on debian:

>> cmake --build . --target install --config Release --parallel 12
[  1%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/eval.cxx.o
[  2%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/utils.cxx.o
[  2%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/timer.cxx.o
[  3%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/io.cxx.o
[  3%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/imu.cxx.o
[  3%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/experimental/synthetic.cxx.o
[  5%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/reactors/scheduler.cxx.o
[  5%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/reactors/pointcloud_writer.cxx.o
[  6%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/experimental/map.cxx.o
[  7%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/algorithm/grid_sampling.cxx.o
[  7%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/data/buffer_collection.cxx.o
[  8%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/experimental/neighborhood.cxx.o
In file included from /usr/include/signal.h:328,
                 from /home/fhoussen/Workspaces/ct_icp/src/SlamCore/utils.cxx:16:
/home/fhoussen/Workspaces/ct_icp/src/SlamCore/utils.cxx:118:32: error: size of array ‘alternate_stack’ is not an integral constant-expression
  118 | static uint8_t alternate_stack[SIGSTKSZ];
      |                                ^~~~~~~~

>> g++ --version
g++ (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.

>> cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux bookworm/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=bookworm

How to fix this?

ghost commented 1 year ago

I fixed it as per the comment

diff --git a/src/SlamCore/utils.cxx b/src/SlamCore/utils.cxx
index 293414b..f21bb10 100644
--- a/src/SlamCore/utils.cxx
+++ b/src/SlamCore/utils.cxx
@@ -115,14 +115,15 @@ void _posix_signal_handler(int sig, siginfo_t *siginfo, void *context) {
     _Exit(1);
 }

-static uint8_t alternate_stack[SIGSTKSZ];
+// static uint8_t alternate_stack[SIGSTKSZ];

 void _setup_signal_handler() {
     {
         stack_t ss = {};
         /* malloc is usually used here, I'm not 100% sure my static allocation
            is valid but it seems to work just fine. */
-        ss.ss_sp = (void *) alternate_stack;
+        // ss.ss_sp = (void *) alternate_stack;
+        ss.ss_sp = malloc(SIGSTKSZ);
         ss.ss_size = SIGSTKSZ;
         ss.ss_flags = 0;
         if (sigaltstack(&ss, NULL) != 0) { err(1, "sigaltstack"); }