我刚开始使用 C++ 开发强大的计算机视觉软件。
由于我使用的第三方功能的性质保密,我会尽量描述的完整。
我正在尝试在 Linux 环境中编译我的源代码。 此源代码使用了许多第三方函数和共享对象。
基本上,我试图将第三方提供的多个 API 组合成一个功能可执行文件。 所有函数在其各自的 API 中都运行良好。
============================================= ==
长话短说,编译成功后,我在可执行文件的运行过程中遇到了 Segmentation Fault 作为错误。
之后,通过gdb进行回溯和调试,我发现程序在第三方提供的共享对象(.so)文件中停止在地址0x0000007b602b5c8
。
我尝试使用命令 info symbol
和 info line *0x0000007b602b5c8
来识别该地址的符号和堆栈帧的变量。
但是,我收到错误
'No line number information available for address 0x0000007b602b5c8'
和
'No symbol matches 0x0000007b602b5c8'
我也尝试过使用信息目标,但没有成功。
知道如何解决这个段错误吗?
最佳答案
通常(但不总是)第三方库提供调试版本,行号和符号在共享对象中可见,如果是这种情况,您可以尝试编译链接调试库而不是发布版本。
否则你必须理所当然地认为第三方的东西是有效的,你必须站在你这边......
段错误通常意味着您正在尝试从尚未创建或已释放或未正确初始化的实例调用方法。所以你必须开始一次一个地寻找你创建和销毁的所有对象,看看你是否犯了任何错误。 (Valgrind 可以帮助您)。
祝你好运
关于c++ - 解决第三方构建系统的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47196547/