OPENCV构建G 符号错误/DSO错误
OpenCV build G++ symbol error/DSO error
我正在使用基于RPI的自动驾驶汽车 - 我利用OpenCV从PI摄像机进行图像处理,以便遵循预先设计的轨道。我目前正在尝试获得此工作(基本的视频流选项),以查看如何使其正常工作,然后再进入NN进行Image Rec。
我的代码如下(由于OPENCV错误而拒绝构建):
#include <stdio.h>
#include <pigpio.h>
#include <stdlib.h>
#include <unistd.h>
#include <wiringPi.h>
#include <softPwm.h>
#include "move.h"
#include "distance.h"
#include <linux/videodev2.h>
#include <libv4l2.h>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/videoio.hpp>
using namespace cv;
void SysMenu(){
system("clear");
int choice;
printf("||Please Choose An Option..........||n");
printf("||1.Test Motors || 2.Test Sensors||n");
printf("||3.Exit || ||n");
scanf("%i",&choice);
switch(choice)
{
case 1:
move(MT_FORWARD, 3000);
printf("fwdn");
move(MT_BACKWARD, 3000);
printf("bwdn");
move(MT_RIGHT, 3000);
printf("rghtn");
move(MT_LEFT, 3000);
printf("leftn");
move(MT_FORWARD | MT_RIGHT, 3000);
printf("fwd, rightn");
move(MT_FORWARD | MT_LEFT, 3000);
printf("fwd leftn");
delay(3000);
SysMenu();
break;
case 2 :
TestSensors();
delay(3000);
SysMenu();
break;
case 3 :
break;
default : printf("Input, Option Not available, Please retry");
SysMenu();
break;
}
}
int main(int, char**) {
VideoCapture cap;
cap.cv::VideoCapture::open(0);
if (!cap.isOpened())
return -1;
Mat edge;//,gray,c_edge,lpf_gaussian_blurr;
namedWindow("Original_Video",1);
for(;;)
{
Mat video;
cap >> video;//capture live feed
//convert to b&w
cvtColor(video,edge,CV_BGR2GRAY);
//Canny(gray,c_edge,0,30,3);
//GaussianBlur(video,lpf_gaussian_blurr,Size(9,9),1.5,1.5);
imshow("Original_Video",edge);
if(waitKey(30)>= 0) break;
}
initialisePins();
SysMenu();
gpioTerminate();
return 0;
}
,输出如下:
g++ -Wall -I/usr/local/include -lopencv_core -lwiringPi -lpigpio -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio -lopencv_imgproc -o "SdCar" "SdCar.cpp" (in directory: /home/pi/selfdrivingcar-17)
/usr/bin/ld: warning: libopencv_imgproc.so.3.1, needed by //usr/local/lib/libopencv_imgcodecs.so, may conflict with libopencv_imgproc.so.2.4
/usr/bin/ld: warning: libopencv_core.so.3.1, needed by //usr/local/lib/libopencv_imgcodecs.so, may conflict with libopencv_core.so.2.4
/usr/bin/ld: //usr/local/lib/libopencv_imgcodecs.so: undefined reference to symbol '_ZN2cv6String10deallocateEv'
//usr/local/lib/libopencv_core.so.3.1: error adding symbols: DSO missing from command line
Compilation failed.
collect2: error: ld returned 1 exit status
-l<library>
标志需要遵循使用它们的源或对象(.o
)文件。
这是链接器的工作方式:它从命令行从左到右处理.cpp/.o
文件,并且不知道它从库中需要什么,直到它在.cpp/.o
文件中看到它们。
因此更改链接器命令:
g++ -Wall -I/usr/local/include -lopencv_core -lwiringPi -lpigpio -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio -lopencv_imgproc -o "SdCar" "SdCar.cpp"
to
g++ -Wall -I/usr/local/include -o "SdCar" "SdCar.cpp" -lopencv_core -lwiringPi -lpigpio -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio -lopencv_imgproc
我遇到了相同的问题,但是我用pkg-config opencv --cflags --libs
解决了它。
当我使用上一个命令编译时,输出如下:
qsp@ubuntu:~/Documents/caffeProject/assign3$ g++ -o "test_mnist"
"test_mnist.cpp" -lopencv_dnn -lopencv_highgui -lopencv_imgcodecs
-lopencv_imgproc -lstdc++ -lopencv_core /usr/bin/ld: warning: libopencv_core.so.3.1, needed by //usr/local/lib/libopencv_dnn.so, may
conflict with libopencv_core.so.2.4 /usr/bin/ld: /tmp/ccovch2b.o:
undefined reference to symbol '_ZN2cv6String10deallocateEv'
//usr/local/lib/libopencv_core.so.3.1: error adding symbols: DSO
missing from command line collect2: error: ld returned 1 exit status
尽管解决了问题,但我仍然想知道为什么。有人可以解释吗?
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- OPENCV构建G 符号错误/DSO错误
- C 实现CNN错误添加符号:命令行中缺少DSO
- libopencv_core.so.2.4:错误添加符号:命令行中缺少DSO
- Opencv,命令行 collect2 中缺少 DSO:错误:ld 返回 1 个退出状态
- glfw3错误:命令行中缺少DSO
- 编译生成文件会产生'ld returned, DSO missing'错误
- 错误:对cv:: videoccapture::~ videoccapture()的引用符号未定义,命令行中缺少DSO