YOLO编译小问题 couldn't open file

最近在编译darknet 在ROS下的代码出现了一个问题,之前编译的时候没出现的,过了一段时间再次编译同一个包却发现配置训练模型文件时弹了一个警告:

warning:deprecated conversion from string constant to ‘char*’

如下图所示。

YOLO编译小问题 couldn't open file_第1张图片

尽管依然可以编译成功,但在运行程序时就会提示 couldn't open file : /home/ros_ws/src/darknet_ros/cfg/tiny-yolo-voc.cfg

如下图所示,因为没有成功打开训练模型文件,所以就无法正常运行了。

YOLO编译小问题 couldn't open file_第2张图片

捣鼓了两天,总算解决了这个问题,只是很奇怪为什么之前跑程序的时候没出现这个问题,反而是过了一段时间之后再跑程序就出现了这个问题。

原因应该是,在程序里指定的路径是将character pointer variable 初始化成一个string literal

大神解释是在最新的C标准或者C++标准中, 使用如下语句:

char *cfg = "/home/will/ros_ws/src/darknet_ros/cfg/tiny-yolo-voc.cfg";
char *weights = "/home/will/ros_ws/src/darknet_ros/weights/tiny-yolo-voc.weights";
无论使用gcc 或者g++命令,都会报 warning:deprecated conversion from string constant to ‘char*’, 不能通过编译。


解决方法:将上述语句改为

char *cfg =(char*) "/home/will/ros_ws/src/darknet_ros/cfg/tiny-yolo-voc.cfg";
char *weights =(char*) "/home/will/ros_ws/src/darknet_ros/weights/tiny-yolo-voc.weights";

同时也要注意,要用绝对路径,不要忘了home后面是user。

之后再编译就不会出现警告了,这个问题之前编译的时候没遇到,有些人编译的时候按照更改前的语句编译也没有问题,如果遇到的可以试试上述的方法,为了解决这个小问题,花了一天半的时间,希望对大家有点帮助,O(∩_∩)O谢谢。

你可能感兴趣的:(ISSUES)