如何解决“无法打开'raise.c'”错误?(VSCODE,LINUX)

Posted

技术标签:

【中文标题】如何解决“无法打开\'raise.c\'”错误?(VSCODE,LINUX)【英文标题】:How can I solve "Unable to open 'raise.c' " Error?(VSCODE , LINUX)如何解决“无法打开'raise.c'”错误?(VSCODE,LINUX) 【发布时间】:2020-03-26 08:37:07 【问题描述】:

(操作系统和版本: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"
        
    ]

task.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)

【问题讨论】:

这是 VS 代码抱怨您没有 C 库的源代码。在大多数情况下,它是不需要的 - 您应该在堆栈中查找调用 raise.c 的代码 - 它通常是引发问题的异常。至于另一个问题 - 没有代码,不知道。 我没有使用 raise.c 库的任何部分。我可以排除这条路吗?以及如何? 您不需要排除路径 - 您需要查看调试器中的堆栈跟踪。它会告诉你你的代码在哪里触发了这个异常。不要执着于你没有这个文件的事实,这是你程序中某些东西的副作用导致它到达那个点。查看堆栈跟踪 - 它会指向直接的罪魁祸首。 @petesh 你能解释更多吗?什么是堆栈跟踪? 调试时 Visual Studio 代码窗口的左侧有三个项目:variableswatchcall stack - 当您检查调用堆栈时,它应该指出程序中的哪个位置出现问题。它可能从libc.so.6!__GI_raise(int sig) 开始,如果您向下查看列表,您会看到您的代码,您应该可以点击它。 【参考方案1】:

终于,经过 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_PATHCMAKE_INSTALL_PREFIX=/usr/local

就是这样, 祝你好运。

【讨论】:

【参考方案2】:

使用 gdb 调试器时可能会出现此错误。在这种情况下,您需要在编译命令中包含“-g”标志。 (这解决了把我带到这里的错误)

您的编译命令可能类似于以下内容:

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

还要注意在 launch.json 中对我有用的程序路径:

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

【讨论】:

【参考方案3】:

如果您不想每次都看到有关丢失文件的提示,您可以创建该目录并在其中放置一个空文件(路径已根据我目前在此处看到的内容进行了调整):

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 从其他路径中找到它,而不会弄乱您的根文件系统。如果他们知道该怎么做,请任何人编辑。

【讨论】:

以上是关于如何解决“无法打开'raise.c'”错误?(VSCODE,LINUX)的主要内容,如果未能解决你的问题,请参考以下文章

在 vs code 终端中安装镭包时如何解决此错误?谢谢

vs2017运行错误,怎么解决

如何解决:在 VS 2015 中使用 Xamarin 初始化 Android 设计器时发生意外错误

如何解决 VS for Xamarin.Forms UWP 应用程序上的调试错误?

如何解决从VS2010到VS2015的reportviewer问题

如何在 VS 2010 中出现第一个错误时停止 C# 编译(VS 2008 宏不起作用)!