Closed Qianxuzhixue closed 3 days 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
函数中没有返回值。我们需要修复这些错误。
::close
未声明这个错误通常是由于缺少包含必要的头文件。::close
是一个全局的C库函数,它定义在<unistd.h>
中。因此,在streamer.cpp
文件的顶部添加#include <unistd.h>
。
第二个错误是关于函数makeStreamer
的。在一个非void
函数中,所有可能的控制流路径都需要返回一个值。确保在所有情况下都有一个返回值。
streamer.cpp
文件顶部添加必要的头文件。makeStreamer
函数在所有路径都有返回值。修复::close
未声明错误:
streamer.cpp
的顶部添加#include <unistd.h>
。修复非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
函数的不同情况。
建议作者在源码中增加以上头文件 @chichengcn
好的,感谢分享。
求解决方案,急!!!