Ubuntu系统安装VScode使用OpenCV时Qt报错(C++)
先把报错代码贴出来:
QSocketNotifier: Can only be used with threads started with QThread ./runopencv: symbol lookup error: /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE
Ubuntu版本是24.04.2desktop,我第一次报这种错误,我的代码是纯OpenCV逻辑,列如如下这种:
`
cv::Mat bgr_img;
bgr_img = cv::imread("imgs/armor2.jpg");
std::vector<cv::Mat> channels;
cv::split(bgr_img, channels);
cv::Mat blue = channels.at(0);
cv::Mat green = channels.at(1);
cv::Mat red = channels.at(2);
cv::resize(blue, blue, {}, 0.5, 0.5);
cv::resize(green, green, {}, 0.5, 0.5);
cv::resize(red, red, {}, 0.5, 0.5);
cv::imshow("blue", blue);
cv::imshow("green", green);
cv::imshow("red", red);
cv::waitKey(0);
return 0;
`
很简单的三通道分离,但是却报这样的错误,相关教程也没有Qt相关的东西,我也是第一次学相关的,OpenCV主流都是Python来写,教C++的少之又少。
从报错的来看是连接时缺少Qt线程相关符号,但是我的CMakeLists.txt本身语法是对的,但是告诉我编译的时候依赖了Qt,这个东西前前后后我查了很多的东西,网上也没有相关问题的解答。人着急的时候越不容易办成事,其实现在回顾一下我在寻找问题的时候已经看见正确答案了,但是没有去想会是那个问题,期间我尝试在CMakeLists.txt里添加Qt查找强制链接相关库,在系统安装Qt5安装包,但是这条路走不通后我问了下ai说是因为系统libpthread.so.0库版本冲突,而且ai已经告诉我很可能是snap包的库和系统库不兼容,当时我想的是那我设定成系统原生路径不就好了,但是依旧没有绕过冲突,等等各种方法手段用了,找问题时间越长脑袋就像是被糊住一样。最后过了一天之后整理思路后找到了问题所在。我也确实没想到问题在这个方面。

解决办法:清除配置上官网重装vscode
进入bash后查进程就是ai说的snap的问题,当时也提过重装软件,但是这个选项直接被我略过了,我通过ubuntu自带的软件商场安装的VScode,snap可能自己有一套shell,所以vscode一直在snap的shell里,在vscode的终端运行报错,而在ubuntu终端可以成功显示图片,这两个shell是两个不同的环境,若想在vscode正常运行只需要删除当前vscode软件清除所有配置,然后去vscode官网上重新下载就好了,我当时跟教程走的,说ubuntu的系统自带的软件商场就可以安装vscode,就直接安装了。
整个处理报错的最大问题就是“我不认为是软件安装的问题”,在简单的重装与困难的其他路,毅然决然走了困难的路,把简单事情复杂化,从表层Qt错误找到snap但就因为我潜意识,只差临门一脚就解决了问题,这件事处理了两天多,还有就是越着急的时候反而脑袋转不动,有时候适当放松一下是必要的。
浙公网安备 33010602011771号