chichengcn / gici-open

GNSS/INS/Camera Integrated Navigation Library
GNU General Public License v3.0
399 stars 112 forks source link

编译make报错,急求解决方案!!! #41

Closed Qianxuzhixue closed 3 days ago

Qianxuzhixue commented 1 month ago

求解决方案,急!!!


/home/dxw/gici-open/src/stream/streamer.cpp: In member function ‘virtual void gici::V4l2Streamer::close()’:
/home/dxw/gici-open/src/stream/streamer.cpp:306:5: error: ‘::close’ has not been declared; did you mean ‘pclose’?
  306 |   ::close(dev_);
      |     ^~~~~
      |     pclose
/home/dxw/gici-open/src/stream/streamer.cpp: In function ‘std::shared_ptr<gici::StreamerBase> gici::makeStreamer(YAML::Node&)’:
/home/dxw/gici-open/src/stream/streamer.cpp:384:55: warning: control reaches end of non-void function [-Wreturn-type]
  384 |   std::string type_str = node["type"].as<std::string>();
      |                                                       ^
make[2]: *** [CMakeFiles/gici.dir/build.make:244: CMakeFiles/gici.dir/src/stream/streamer.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:159: CMakeFiles/gici.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
dxw@ubuntu20:~/gici-open/build$ 
Qianxuzhixue commented 1 month ago

问了GTP之后,问题已经解决,方法如下: 在源代码中找到下面的文件,并添加一个头文件

// /home/dxw/gici-open/src/stream/streamer.cpp

#include <unistd.h>  // 添加这个头文件以声明close函数

再次尝试make后,完成编译:

dxw@ubuntu20:~/gici-open/build$ make -j8
[  2%] Built target fast
[ 25%] Built target rtklib
[ 35%] Built target vikit_common
[ 53%] Built target svo
[ 54%] Building CXX object CMakeFiles/gici.dir/src/stream/streamer.cpp.o
[ 54%] Building CXX object CMakeFiles/gici.dir/src/gnss/ambiguity_resolution.cpp.o
[ 54%] Building CXX object CMakeFiles/gici.dir/src/gnss/dgnss_estimator.cpp.o
[ 55%] Building CXX object CMakeFiles/gici.dir/src/gnss/doppler_error.cpp.o
[ 55%] Building CXX object CMakeFiles/gici.dir/src/gnss/ambiguity_resolution_differential.cpp.o
[ 56%] Building CXX object CMakeFiles/gici.dir/src/gnss/code_bias.cpp.o
[ 57%] Building CXX object CMakeFiles/gici.dir/src/gnss/gnss_common.cpp.o
[ 57%] Building CXX object CMakeFiles/gici.dir/src/gnss/geodetic_coordinate.cpp.o
[ 58%] Building CXX object CMakeFiles/gici.dir/src/gnss/gnss_estimator_base.cpp.o
/home/dxw/gici-open/src/stream/streamer.cpp: In member function ‘virtual void gici::V4l2Streamer::close()’:
/home/dxw/gici-open/src/stream/streamer.cpp:306:5: error: ‘::close’ has not been declared; did you mean ‘pclose’?
  306 |   ::close(dev_);
      |     ^~~~~
      |     pclose
/home/dxw/gici-open/src/stream/streamer.cpp: In function ‘std::shared_ptr<gici::StreamerBase> gici::makeStreamer(YAML::Node&)’:
/home/dxw/gici-open/src/stream/streamer.cpp:384:55: warning: control reaches end of non-void function [-Wreturn-type]
  384 |   std::string type_str = node["type"].as<std::string>();
      |                                                       ^
make[2]: *** [CMakeFiles/gici.dir/build.make:244: CMakeFiles/gici.dir/src/stream/streamer.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:159: CMakeFiles/gici.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
dxw@ubuntu20:~/gici-open/build$ vi /home/dxw/gici-open/src/stream/streamer.cpp
dxw@ubuntu20:~/gici-open/build$ make -j8
[  2%] Built target fast
[ 25%] Built target rtklib
[ 35%] Built target vikit_common
[ 53%] Built target svo
[ 53%] Building CXX object CMakeFiles/gici.dir/src/gnss/gnss_estimator_base_differential.cpp.o
[ 53%] Building CXX object CMakeFiles/gici.dir/src/stream/streamer.cpp.o
[ 53%] Building CXX object CMakeFiles/gici.dir/src/gnss/phase_bias.cpp.o
[ 53%] Building CXX object CMakeFiles/gici.dir/src/gnss/gnss_loose_estimator_base.cpp.o
[ 54%] Building CXX object CMakeFiles/gici.dir/src/gnss/gnss_types.cpp.o
[ 55%] Building CXX object CMakeFiles/gici.dir/src/gnss/gnss_estimator_base_logger.cpp.o
[ 55%] Building CXX object CMakeFiles/gici.dir/src/gnss/phaserange_error.cpp.o
[ 56%] Building CXX object CMakeFiles/gici.dir/src/gnss/phase_windup.cpp.o
[ 57%] Building CXX object CMakeFiles/gici.dir/src/gnss/phaserange_error_dd.cpp.o
[ 57%] Building CXX object CMakeFiles/gici.dir/src/gnss/phaserange_error_sd.cpp.o
[ 58%] Building CXX object CMakeFiles/gici.dir/src/gnss/position_error.cpp.o
[ 59%] Building CXX object CMakeFiles/gici.dir/src/gnss/ppp_estimator.cpp.o
[ 59%] Building CXX object CMakeFiles/gici.dir/src/gnss/pseudorange_error.cpp.o
[ 60%] Building CXX object CMakeFiles/gici.dir/src/gnss/pseudorange_error_dd.cpp.o
[ 60%] Building CXX object CMakeFiles/gici.dir/src/gnss/pseudorange_error_sd.cpp.o
[ 61%] Building CXX object CMakeFiles/gici.dir/src/gnss/relative_isb_error.cpp.o
[ 61%] Building CXX object CMakeFiles/gici.dir/src/gnss/rtk_estimator.cpp.o
[ 62%] Building CXX object CMakeFiles/gici.dir/src/gnss/sdgnss_estimator.cpp.o
[ 62%] Building CXX object CMakeFiles/gici.dir/src/gnss/spp_estimator.cpp.o
[ 63%] Building CXX object CMakeFiles/gici.dir/src/gnss/velocity_error.cpp.o
[ 64%] Building CXX object CMakeFiles/gici.dir/src/imu/hmc_error.cpp.o
[ 64%] Building CXX object CMakeFiles/gici.dir/src/imu/imu_common.cpp.o
[ 65%] Building CXX object CMakeFiles/gici.dir/src/imu/imu_error.cpp.o
[ 65%] Building CXX object CMakeFiles/gici.dir/src/imu/imu_estimator_base.cpp.o
[ 66%] Building CXX object CMakeFiles/gici.dir/src/imu/nhc_error.cpp.o
[ 66%] Building CXX object CMakeFiles/gici.dir/src/imu/roll_and_pitch_error.cpp.o
[ 67%] Building CXX object CMakeFiles/gici.dir/src/imu/speed_and_bias_error.cpp.o
[ 67%] Building CXX object CMakeFiles/gici.dir/src/imu/yaw_error.cpp.o
[ 68%] Building CXX object CMakeFiles/gici.dir/src/vision/feature_handler.cpp.o
[ 69%] Building CXX object CMakeFiles/gici.dir/src/vision/feature_matcher.cpp.o
[ 69%] Building CXX object CMakeFiles/gici.dir/src/vision/feature_tracker.cpp.o
[ 70%] Building CXX object CMakeFiles/gici.dir/src/vision/homogeneous_point_error.cpp.o
[ 70%] Building CXX object CMakeFiles/gici.dir/src/vision/relative_pose_error.cpp.o
[ 71%] Building CXX object CMakeFiles/gici.dir/src/vision/visual_estimator_base.cpp.o
[ 71%] Building CXX object CMakeFiles/gici.dir/src/vision/visual_initialization.cpp.o
[ 72%] Building CXX object CMakeFiles/gici.dir/src/estimate/ceres_iteration_callback.cpp.o
[ 72%] Building CXX object CMakeFiles/gici.dir/src/estimate/error_interface.cpp.o
[ 73%] Building CXX object CMakeFiles/gici.dir/src/estimate/estimating.cpp.o
[ 74%] Building CXX object CMakeFiles/gici.dir/src/estimate/estimator_base.cpp.o
[ 74%] Building CXX object CMakeFiles/gici.dir/src/estimate/estimator_types.cpp.o
[ 75%] Building CXX object CMakeFiles/gici.dir/src/estimate/graph.cpp.o
[ 75%] Building CXX object CMakeFiles/gici.dir/src/estimate/homogeneous_point_local_parameterization.cpp.o
[ 76%] Building CXX object CMakeFiles/gici.dir/src/estimate/homogeneous_point_parameter_block.cpp.o
[ 76%] Building CXX object CMakeFiles/gici.dir/src/estimate/local_parameterization_additional_interfaces.cpp.o
[ 77%] Building CXX object CMakeFiles/gici.dir/src/estimate/marginalization_error.cpp.o
[ 77%] Building CXX object CMakeFiles/gici.dir/src/estimate/motion_detector.cpp.o
[ 78%] Building CXX object CMakeFiles/gici.dir/src/estimate/pose_error.cpp.o
[ 78%] Building CXX object CMakeFiles/gici.dir/src/estimate/pose_local_parameterization.cpp.o
[ 79%] Building CXX object CMakeFiles/gici.dir/src/estimate/pose_parameter_block.cpp.o
[ 80%] Building CXX object CMakeFiles/gici.dir/src/estimate/speed_and_bias_parameter_block.cpp.o
[ 80%] Building CXX object CMakeFiles/gici.dir/src/fusion/gnss_imu_camera_srr_estimator.cpp.o
[ 81%] Building CXX object CMakeFiles/gici.dir/src/fusion/gnss_imu_initializer.cpp.o
[ 81%] Building CXX object CMakeFiles/gici.dir/src/fusion/gnss_imu_lc_estimator.cpp.o
[ 82%] Building CXX object CMakeFiles/gici.dir/src/fusion/multisensor_estimating.cpp.o
[ 82%] Building CXX object CMakeFiles/gici.dir/src/fusion/ppp_imu_tc_estimator.cpp.o
[ 83%] Building CXX object CMakeFiles/gici.dir/src/fusion/rtk_imu_camera_rrr_estimator.cpp.o
[ 83%] Building CXX object CMakeFiles/gici.dir/src/fusion/rtk_imu_tc_estimator.cpp.o
[ 84%] Building CXX object CMakeFiles/gici.dir/src/fusion/spp_imu_camera_rrr_estimator.cpp.o
[ 85%] Building CXX object CMakeFiles/gici.dir/src/fusion/spp_imu_tc_estimator.cpp.o
[ 85%] Linking CXX shared library libgici.so
[ 99%] Built target gici
[100%] Building CXX object CMakeFiles/gici_main.dir/src/gici_main.cpp.o
[100%] Linking CXX executable gici_main
/usr/bin/ld: warning: libglog.so.0, needed by libgici.so, may conflict with libglog.so.3
[100%] Built target gici_main
dxw@ubuntu20:~/gici-open/build$ 

GPT的完整回复如下: 这个错误表明在编译streamer.cpp文件时,编译器无法找到::close函数,此外在某个非void函数中没有返回值。我们需要修复这些错误。

错误1:::close 未声明

这个错误通常是由于缺少包含必要的头文件。::close是一个全局的C库函数,它定义在<unistd.h>中。因此,在streamer.cpp文件的顶部添加#include <unistd.h>

错误2:非void函数缺少返回值

第二个错误是关于函数makeStreamer的。在一个非void函数中,所有可能的控制流路径都需要返回一个值。确保在所有情况下都有一个返回值。

修复

  1. streamer.cpp文件顶部添加必要的头文件。
  2. 确保makeStreamer函数在所有路径都有返回值。

详细计划

  1. 修复::close未声明错误:

    • streamer.cpp的顶部添加#include <unistd.h>
  2. 修复非void函数缺少返回值:

    • 确保makeStreamer函数返回std::shared_ptr<gici::StreamerBase>

修改后的代码

streamer.cpp

#include <unistd.h>  // 添加这个头文件
#include <memory>
#include <yaml-cpp/yaml.h>

namespace gici {

class StreamerBase {};

class V4l2Streamer : public StreamerBase {
public:
    void close() {
        ::close(dev_);  // 使用全局命名空间中的 close 函数
    }
private:
    int dev_;
};

std::shared_ptr<StreamerBase> makeStreamer(YAML::Node& node) {
    std::string type_str = node["type"].as<std::string>();

    // 根据 type_str 进行不同的处理
    // 例如:
    if (type_str == "v4l2") {
        return std::make_shared<V4l2Streamer>();
    }

    // 确保函数在所有路径都有返回值
    return nullptr;  // 添加一个默认返回值
}

}  // namespace gici

编译并运行

# 假设你使用 cmake 进行编译
cd /home/dxw/gici-open
make

下一步建议

a. 添加更多详细的错误处理和日志记录,以便在调试时更容易发现问题。

b. 编写单元测试来验证makeStreamer函数的不同情况。

Qianxuzhixue commented 1 month ago

建议作者在源码中增加以上头文件 @chichengcn

chichengcn commented 2 weeks ago

好的,感谢分享。