出现这种core dump是怎能回事?SIGSEGV

[复制链接]
 楼主| keer_zu 发表于 2023-2-14 16:18 | 显示全部楼层 |阅读模式
Crash- signal SIGSEGV, Segmentation fault. ../sysdeps/x86_64/strlen.S: No such file or directory.


还有类似:
Program terminated with signal SIGSEGV, Segmentation fault.
#0  __cxxabiv1::__cxa_end_catch ()
    at ../../../../../libstdc++-v3/libsupc++/eh_catch.cc:97
97      ../../../../../libstdc++-v3/libsupc++/eh_catch.cc: No such file or directory.
 楼主| keer_zu 发表于 2023-2-15 10:20 | 显示全部楼层


例子1的表现:
Core was generated by `./testjsonc'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 strlen () at ../sysdeps/x86_64/strlen.S:106
106 ../sysdeps/x86_64/strlen.S: No such file or directory.
#0 strlen () at ../sysdeps/x86_64/strlen.S:106
1 0x00007f46ecfa08d0 in json_object_nget_value ()
2 0x00007f46ecfa307c in json_object_get_value ()
3 0x00007f46ecfa30a1 in json_object_get_string ()



问题可能是这样:
json-c和parson都定义了函数json_object_get_string()(以及其他一些函数)。当需要将已编译的c或c++对象链接到您使用的库以创建可执行文件时,链接器在某些地方链接到错误的json_object_get_string()。你不能同时链接到两个提供相同符号(例如函数)不同版本的库,至少没有一些非常复杂和高级的技巧。


 楼主| keer_zu 发表于 2023-2-15 10:23 | 显示全部楼层
一种解决办法:
  1. 如果你在你的应用程序中没有显式地链接到parson,我猜是你正在使用的某个库,可能间接地,链接到另一个json库。如果两者都需要,没有简单的解决方案。处理它的一种可能的方法是将你的应用程序分成两部分,一部分使用json-c,另一部分使用parson,然后为这两部分定义某种通信方式。
  2. 另外,你也可以创建一个本地的json-c或parson的拷贝,以某种方式重命名每个符号,然后重建所有的东西来使用重命名的符号(例如,通过像#define json_object_get_string _foo_json_object_get_string等…)
 楼主| keer_zu 发表于 2023-2-15 10:23 | 显示全部楼层
解决办法:
  1. 如果你在你的应用程序中没有显式地链接到parson,我猜是你正在使用的某个库,可能间接地,链接到另一个json库。如果两者都需要,没有简单的解决方案。处理它的一种可能的方法是将你的应用程序分成两部分,一部分使用json-c,另一部分使用parson,然后为这两部分定义某种通信方式。
  2. 另外,你也可以创建一个本地的json-c或parson的拷贝,以某种方式重命名每个符号,然后重建所有的东西来使用重命名的符号(例如,通过像#define json_object_get_string _foo_json_object_get_string等…)
 楼主| keer_zu 发表于 2023-2-15 10:24 | 显示全部楼层
实例2很可能也是库的原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部