我有两个升压头位置L1和L2。 L1是gcc可以找到的默认位置,而L2不是。编译共享库时,我明确使用了-IL2。
两个程序P1和P2调用共享库。
调试P1时,GDB使用L2中的标头。这是预料之中的。 但是在调试P2时,L1中的标头由GDB使用......
我假设所有调试符号和位置都是在编译时决定的。如果未移动源代码,gdb可以自动找到它们。并且L1也不在GDB的源路径中。 gdb如何找到不同的位置?
答案 0 :(得分:2)
gdb如何找到不同的位置?
P1很可能本身使用Boost,但P2确实如此。
您可以使用readelf -wl P1 | grep L1
和readelf -wl P2 | grep L1
确认这一点。
如果第二个命令导致非空输出,则表示存在ODR违规,并且您的程序可能具有各种未定义的行为(包括显示以正常工作,但是要将正确的细微更改分解为该计划或图书馆。)