尝试记录下编译中遇到的一些问题

cmake合集

*.cpp:*:*: error: ‘*’ was not declared in this scope

看下面的例子:

$ make -j4
[ 50%] Building CXX object CMakeFiles/YOLOv5ncnn-vulkan.dir/src/YOLOv5ncnn-vulkan.cpp.o
/home/\*/yolov5maligpu/YOLOv5-ncnn-arm/YOLOv5ncnn-vulkan/src/YOLOv5ncnn-vulkan.cpp: In function ‘int main()’:
/home/\*/yolov5maligpu/YOLOv5-ncnn-arm/YOLOv5ncnn-vulkan/src/YOLOv5ncnn-vulkan.cpp:122:13: error: ‘CV_CAP_PROP_FRAME_WIDTH’ was not declared in this scope
  122 |     cap.set(CV_CAP_PROP_FRAME_WIDTH, frameWidth);
      |             ^~~~~~~~~~~~~~~~~~~~~~~
/home/\*/yolov5maligpu/YOLOv5-ncnn-arm/YOLOv5ncnn-vulkan/src/YOLOv5ncnn-vulkan.cpp:123:13: error: ‘CV_CAP_PROP_FRAME_HEIGHT’ was not declared in this scope
  123 |     cap.set(CV_CAP_PROP_FRAME_HEIGHT, frameHeight);
      |             ^~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/YOLOv5ncnn-vulkan.dir/build.make:76: CMakeFiles/YOLOv5ncnn-vulkan.dir/src/YOLOv5ncnn-vulkan.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/YOLOv5ncnn-vulkan.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

“was not declared in this scope”这里就说明函数并未在使用的区域声明过,要么是自己写错了函数声明的区域(非全局);要么就是这项目使用的库版本对不上你系统安装的版本,两个版本之间这个函数名改了,这个时候就只有自己去搜修改后的函数名了。

上面这个例子就是opencv3的项目用opencv4的库编译时找不到“CV_CAP_PROP_FRAME_HEIGHT”和“CV_CAP_PROP_FRAME_WIDTH”的报错,opencv4将这两函数分别改名为了“CAP_PROP_FRAME_HEIGHT”和“CAP_PROP_FRAME_WIDTH”,项目里全局搜索替换就好。