如何解决“无法打开'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 代码窗口的左侧有三个项目:variables
、watch
和 call 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_PATH
和CMAKE_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 2015 中使用 Xamarin 初始化 Android 设计器时发生意外错误
如何解决 VS for Xamarin.Forms UWP 应用程序上的调试错误?