gpt4 book ai didi

c++ - OpenCV 构建 G++ 符号错误/DSO 错误

转载 作者:行者123 更新时间:2023-11-28 05:17:21 25 4
gpt4 key购买 nike

我正在研究基于 Rpi 的自动驾驶汽车 - 我利用 OpenCV 从 pi 相机进行图像处理,以遵循预先设计的轨道。我目前正在尝试让它工作(一个基本的视频流选项),以了解在我开发用于图像录制的 NN 之前如何让它工作。

我的代码如下(由于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("fwd\n");
move(MT_BACKWARD, 3000);
printf("bwd\n");
move(MT_RIGHT, 3000);
printf("rght\n");
move(MT_LEFT, 3000);
printf("left\n");
move(MT_FORWARD | MT_RIGHT, 3000);
printf("fwd, right\n");
move(MT_FORWARD | MT_LEFT, 3000);
printf("fwd left\n");
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"

g++ -Wall -I/usr/local/include  -o "SdCar" "SdCar.cpp" -lopencv_core -lwiringPi -lpigpio -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio -lopencv_imgproc

关于c++ - OpenCV 构建 G++ 符号错误/DSO 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42333338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com