c++ - 连接 OpenCV 时对 SGILL 进行编程

标签 c++ linux opencv gdb illegal-instruction

我知道这个问题与其他问题类似,但它们似乎都不能解决我的问题。

症状

  • 使用 gdb 轻松构建并运行 gdb_test
  • 程序SIGILL的:

~/projects/gdb_test/build> gdb gdb_test           
GNU gdb (GDB; openSUSE Tumbleweed) 8.3.1
(...)

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from gdb_test...
(gdb) r
Starting program: /home/jaques/projects/gdb_test/build/gdb_test 
Missing separate debuginfos, use: zypper install glibc-debuginfo-2.31-5.9.x86_64
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
[New Thread 0x7fffebae8700 (LWP 1210)]
[New Thread 0x7fffeb2e7700 (LWP 1211)]
[New Thread 0x7fffe6ae6700 (LWP 1212)]

Thread 1 "gdb_test" received signal SIGILL, Illegal instruction.
0x00007ffff7d90617 in ?? () from /usr/lib64/libopencv_gapi.so.4.2

(gdb) 

示例项目:

“main.cpp”

#include <iostream>

int main(int argc, char **argv) {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
project(gdb_test)

find_package( OpenCV REQUIRED )    # Works fine if this line is removed.

add_executable(gdb_test main.cpp)
install(TARGETS gdb_test RUNTIME DESTINATION bin)

环境

  • 运行更新的 OpenSuse 的 Linux 机器:

NAME="openSUSE Tumbleweed" VERSION="20200622"

  • G++ 10.1.1
  • GDB 8.3.1
  • opencv-devel 4.2.0-4.1
  • 架构 x86_64
  • 未剥离,带有调试信息可执行文件:

gdb_test/build> file gdb_test gdb_test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=28f8c835686d92c15cb8b0cfb201c5f45a8a89c7, for GNU/Linux 3.2.0, with debug_info, not stripped


可能出了什么问题?

如何解决?

有什么想法吗?

谢谢。

最佳答案

根据您的评论:

I downgraded from opencv-devel-4.2.0-4.1.x86_64 to opencv3-3.4.9-2.4.x86_64 and it is not crashing anymore..

我只能断定包裹已损坏。

如果您确实需要 OpenCV 4,我建议您从源代码构建。

关于c++ - 连接 OpenCV 时对 SGILL 进行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62581736/

相关文章:

c++ - 从析构函数调用线程 vector

linux - 如何将图标添加到 bash 提示符

python - 将 python 代码转换为 cython

python - 检测位于图像opencv侧面的对象

opencv - 轮廓分割

c++ - 在 O(min(log(n),log(m)) 复杂度中找到两个不同大小的排序数组的中位数

c++ - "Non-pointer POD"C++ 类型

c++ - Boost.Regex 解析

用于检查 csv 文件中每个字段长度的 LINUX 脚本

重启后Linux环境变量重置