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