Как я могу устранить ошибку Не удается открыть файл «raise.c»? (VSCODE, LINUX)

(ОС и версия: Ubuntu 18.4, версия VS Code: Vscode 1.4, версия расширения C / C ++: 0.26)

Здравствуйте, я прочитал все статьи о «raise.c», и ни одна из них не решила мою проблему, я просто написал простой код OpenCV, который захватывает кадры веб-камеры. каждый раз, когда я запускаю свой код, он часто показывает ошибку. сообщение об ошибке:

Невозможно открыть «raise.c»: невозможно прочитать файл (ошибка: файл не найден (/build/glibc-OTsEL5/glibc-2.27/sysdeps/unix/sysv/linux/raise.c)).

launch.json это:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++ build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

и tasks.json:

{
    "tasks": [
        {
            "type": "shell",
            "label": "g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "`pkg-config",
                 "--libs",
                  "--cflags", 
                  "opencv4`"

            ],
            "options": {
                "cwd": "/usr/bin"
            }
        }
    ],
    "version": "2.0.0"
}

Итак, как я могу решить эту проблему? есть ли способ решить эту проблему. Я начинающий программист.

и вторая проблема заключается в том, что каждый раз, когда я запускаю этот код, моя веб-камера зависает, и мне приходится использовать «принудительно» снизу. почему моя веб-камера зависает? любые идеи приветствуются. Благодарю. (Я использую ubuntu, и моя IDE - Vscode)


person Hamid Reza    schedule 01.12.2019    source источник
comment
Это код VS, который жалуется, что у вас нет исходного кода для библиотеки C. По большей части в этом нет необходимости - вы должны искать в стеке код, который вызвал raise.c - обычно это вызванное исключение, которое является причиной проблемы. Что касается другой проблемы - ни кода, ни идеи.   -  person Petesh    schedule 01.12.2019
comment
Я не использовал какую-либо часть библиотеки raise.c. я могу исключить этот путь? и как?   -  person Hamid Reza    schedule 01.12.2019
comment
Путь исключать не нужно - нужно посмотреть трассировку стека в отладчике. Он покажет вам, где ваш код вызвал это исключение. Не зацикливайтесь на том, что у вас нет этого файла, это побочный эффект чего-то в вашей программе, заставляющий его достичь этой точки. Посмотрите на stacktrace - он укажет на непосредственного виновника.   -  person Petesh    schedule 01.12.2019
comment
@petesh не могли бы вы объяснить больше? что такое stacktrace?   -  person Hamid Reza    schedule 02.12.2019
comment
В левой части окна кода Visual Studio при отладке есть три элемента: variables, watch и call stack - когда вы исследуете стек вызовов, он должен указывать, где в вашей программе возникает проблема. Вероятно, он будет начинаться с libc.so.6!__GI_raise(int sig), и если вы посмотрите вниз по списку, вы увидите свой код, на который вы сможете щелкнуть.   -  person Petesh    schedule 02.12.2019


Ответы (3)


Наконец, я нашел решение через 3 дня работы. Пишу решение для следующего поколения. Нет необходимости искать в интернете, ничего не найдешь: D

хорошо, если вы хотите решить проблему, вам нужно снова переустановить OpenCV и отключить все флаги. это ошибка. Я использовал следующие флаги:

cmake -D BUILD_TIFF=ON -D WITH_CUDA=OFF -D ENABLE_AVX=OFF -D
WITH_OPENGL=ON -D WITH_OPENCL=OFF -D WITH_IPP=OFF -D WITH_TBB=ON -D
BUILD_TBB=ON -D WITH_EIGEN=OFF -D WITH_V4L=OFF -D WITH_VTK=OFF -D 
BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D CMAKE_BUILD_TYPE=RELEASE -D
CMAKE_INSTALL_PREFIX=/usr/local -D
OPENCV_EXTRA_MODULES_PATH=./../opencv_contrib/modules ..

заполните OPENCV_EXTRA_MODULES_PATH и CMAKE_INSTALL_PREFIX=/usr/local правильным путем!

вот и все, удачи.

person Hamid Reza    schedule 03.12.2019

Эта ошибка может возникнуть при использовании отладчика gdb. В таком случае вам нужно включить флаг '-g' в вашу команду компиляции. (это решило ошибку, которая привела меня сюда)

Ваша команда компиляции может быть похожей на приведенную ниже:

g++ -Wall -Werror -std=c++14 -g -O -o <executable> <fileName>

Также отмечу программный путь, который у меня работает в launch.json:

"program": "${workspaceFolder}/<executable>"

person canni6    schedule 26.10.2020

Если вы просто не хотите, чтобы каждый раз выводился запрос об отсутствующем файле, вы можете создать этот каталог и поместить туда пустой файл (путь скорректирован в соответствии с тем, что я вижу здесь сейчас):

sudo mkdir -p  /build/glibc-eX1tMB/glibc-2.31/sysdeps/unix/sysv/linux/
sudo touch /build/glibc-eX1tMB/glibc-2.31/sysdeps/unix/sysv/linux/raise.c

Если вы хотите видеть какой-либо исходный код во время отладки, вы можете поместить туда файл для той версии glibc, которую вы используете. Найдите в онлайн-репозитории тег, соответствующий версии, в пути к ошибке, и получите его оттуда. Ваша версия glibc-2.27, а моя glibc-2.31. Моя здесь: https://github.com/bminor/glibc/blob/glibc-2.31/sysdeps/unix/sysv/linux/raise.c Итак, я могу взять его следующим образом:

pushd ~/temp
wget https://raw.githubusercontent.com/bminor/glibc/glibc-2.31/sysdeps/unix/sysv/linux/raise.c
sudo cp -a raise.c /build/glibc-eX1tMB/glibc-2.31/sysdeps/unix/sysv/linux/

Вероятно, есть способ указать VSCode / gdb найти его по другому пути, не вмешиваясь в вашу корневую файловую систему. Пожалуйста, отредактируйте, если они знают, как это сделать.

person ahcox    schedule 04.06.2021