我在Linux和Code上运行OpenCV时遇到了问题.我遵循了说明步骤,但在上编译时仍然失败:

/tmp/ccEkxgny.o: In function `cv::String::~String()':
cam_usb.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()'

测试代码很简单:

#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;

int main()
{
    cout << "Test" << endl;
}

无论何时删除OpenCV标头,代码都可以正常执行. C_cpp_Properties.json包含目录按照教程中的说明进行设置,指向正确的安装目录:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
**                "/home/XXXX/opencv/include/opencv2/**",**
                "${workspaceFolder}/**",
                "/usr/local/include/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

我还链接了tasks.json中的依赖项:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc build active file",
            "command": "/usr/bin/gcc",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
**                "-lopencv_core",
                "-lopencv_imgproc",
                "-lopencv_highgui"**
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

尽管如此,错误仍然存在. 遗憾的是,我找不到任何进一步的决议建议,任何帮助都是非常感谢的. 先谢谢你. (对不起,第一次使用Linux CPP OpenCV.:()

推荐答案

感谢Dan Masek强调了旧的OpenCV版本(3.2)的问题,我升级到OpenCV 4并将其安装到标准的/usr/local/.文件夹. 感谢fcc验证它在他的设置工作.

在安装OpenCV4之后,我仍然遇到了一些问题,所以,对于在VS Code Linux和其他库上遇到问题的任何人,请遵循以下提示:

此外,tasks.json文件还需要进一步修改: 使用库的位置扩展args-"-I/usr/local/include/opencv4" (注:升级后新的库位置)

Complete tasks.json:

{
"tasks": [
    {
        "type": "cppbuild",
        "label": "C/C++: gcc build active file",
        "command": "/usr/bin/gcc",
        "args": [
            "-fdiagnostics-color=always",
            "-g",
            "${file}",
            "-o",
            "${fileDirname}/${fileBasenameNoExtension}",
            "-lopencv_core",
            "-lopencv_imgproc",
            "-lopencv_highgui",
            "-lopencv_videoio",
            "-I/usr/local/include/opencv4"
        ],
        "options": {
            "cwd": "${fileDirname}"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        },
        "detail": "Task generated by Debugger."
    }
],
"version": "2.0.0"

现在像护身符一样工作了-谢谢!

Linux相关问答推荐

如何确定Linux上的最大静态TLS(线程本地存储)块大小?

为什么我在退出SD-Bus容器时出现错误?

Bash:将多行转换为单行的命令

Git - 打印以不同编码混合的文件

BASH:在curl输出的每一行添加前缀

/proc/mounts 没有像 /proc/self/mountinfo 这样的源信息

Azure Nvidia 中的 apt-update 给出公钥错误

如何在 Linux 命令行上解析 CSV 文件?

如何使用完整路径或文件名显示 grep 结果

安装 mod_ssl 亚马逊 Linux

当命令太长时,命令行会自动覆盖

在 C 中检测 64 位编译

如何获取WiFi网络接口的MAC地址?

如何告诉 CMake 将构建文件放在哪里?

在 mac 上通过 ssh 连接到 amazon aws linux 服务器

在 Linux 上用 C 语言读写串口

是否有一个 linux 命令来确定与给定进程 ID 关联的窗口 ID?

如何获取 GNU Makefile 中使用的 shell 命令的退出状态?

Bash:如何标记字符串变量?

在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异