目前有两组库 libA 和 libB,分别单独编译到程序 A 和 B 中,均运行正常,但是把 libA 和 libB 一同编译到程序 C 中,且只调用 libA 的函数,运行到特定位置后会报段错误,可能是什么原因,如何排查?
|  |      1wutiantong      2019-09-02 09:59:27 +08:00 太多原因了,你的描述里几乎没提供什么有效信息啊。 | 
|      2GeruzoniAnsasu      2019-09-02 10:13:58 +08:00 “把 libA 和 libB 一同编译到程序 C 中”  隐藏了关键信息 | 
|      3GeruzoniAnsasu      2019-09-02 10:16:12 +08:00 (手滑) 程序 C 肯定不可能是 A+B 把代码放一起就完事,一定有一些跟 A 和 B 都不同的逻辑。问题出在 caller C 上,跟 libA libB 应该都没关系 | 
|      4paparika OP 程序 c 里,我基本上就是 main 一进来就调 libA 的函数,别的什么都不做,也崩溃了 | 
|      5ace00010      2019-09-02 10:19:56 +08:00 单独跑 AB 都没问题的,混合到你的 C 代码就出现了,特定位置出现就用 gdb 调试吧,快很多 | 
|      6chinuno      2019-09-02 10:26:06 +08:00 via Android 怎么觉得你这是 ab 有同名符号,调用 a 的时候子调用调到 b 的东西去了 | 
|      7augustheart      2019-09-02 10:36:03 +08:00 内存管理那块出问题吧 | 
|  |      8zmxnv123      2019-09-02 12:25:07 +08:00 Valgrind 看下有没有内存问题 | 
|  |      9benson458      2019-09-02 12:28:30 +08:00 via iPhone 以前遇到过类似的情况,liba 和 libb 都是动态库。然后把这两者编译成静态的,再一起编译到 C,就好了 | 
|      10nicevar      2019-09-02 13:37:09 +08:00 最后应该发现是命名问题导致的 | 
|      11hsuehsen      2019-09-02 15:33:28 +08:00 1. 名字污染 2. 内存越界 3. 或者,堆或栈溢出 | 
|      12katsusan      2019-09-02 16:04:42 +08:00 via iPhone debug 一下生成的 core 文件看看 | 
|  |      13SelFree      2019-09-02 16:48:20 +08:00 stl ? | 
|  |      14hxndg      2019-09-02 17:46:21 +08:00 那你无头绪以后有没有单步跟踪,断点追查呢? GDB 啊 | 
|      15paparika OP | 
|  |      16ilotuo      2019-09-02 18:16:33 +08:00 装个 backtrace 看下 | 
|      17b00tyhunt3r      2019-09-04 09:39:24 +08:00 via iPad 进 liba libb 找找有没有同名全局变量,强符号 | 
|      18paparika OP @b00tyhunt3r 有啥辅助工具吗,里面有很多库,每个库又有很多命名 |