Boost gdb从不同的位置查找标题

Boost gdb从不同的位置查找标题,boost,gdb,Boost,Gdb,我有两个增压头位置L1和L2。L1是gcc可以找到的默认位置,而L2不是。在编译共享库时,我显式地使用了-IL2 两个程序P1和P2调用共享库 调试P1时,GDB使用L2中的头。这是意料之中的。 但在调试P2时,L1中的头被GDB使用 我假设所有调试符号和位置都是在编译时确定的。如果源代码没有移动,gdb可以自动找到它们。L1也不在GDB的源路径中。gdb如何找到不同的位置 gdb如何找到不同的位置 很可能P1本身不使用Boost,但P2使用Boost 您可以使用readelf-wlp1 | g

我有两个增压头位置L1和L2。L1是gcc可以找到的默认位置,而L2不是。在编译共享库时,我显式地使用了-IL2

两个程序P1和P2调用共享库

调试P1时,GDB使用L2中的头。这是意料之中的。 但在调试P2时,L1中的头被GDB使用

我假设所有调试符号和位置都是在编译时确定的。如果源代码没有移动,gdb可以自动找到它们。L1也不在GDB的源路径中。gdb如何找到不同的位置

gdb如何找到不同的位置

很可能P1本身不使用Boost,但P2使用Boost

您可以使用
readelf-wlp1 | grep L1
readelf-wl P2 | grep L1
来确认这一点

如果第二个命令导致非空输出,则表明存在ODR冲突,并且您的程序可能具有各种未定义的行为(包括看似正常工作,但由于对程序或库进行了正确的微小更改而中断)

gdb如何找到不同的位置

很可能P1本身不使用Boost,但P2使用Boost

您可以使用
readelf-wlp1 | grep L1
readelf-wl P2 | grep L1
来确认这一点


如果第二个命令导致非空输出,则表明存在ODR冲突,并且您的程序可能有各种未定义的行为(包括看起来工作正常,但由于对程序或库进行了正确的小更改而中断)。

我猜P2会使用它。P2不是一个开源程序。readelf-wl不返回任何符号。如果P2确实使用了一些不同的boost头,那么有没有办法隔离这两个boost头?@joecgdb在调试P2时并没有神奇地发明L1。如果
readelf-wlp2
为空,则必须存在引用L1的其他共享库。使用共享的
(gdb)信息
并检查它们。我想P2会使用它。P2不是一个开源程序。readelf-wl不返回任何符号。如果P2确实使用了一些不同的boost头,那么有没有办法隔离这两个boost头?@joecgdb在调试P2时并没有神奇地发明L1。如果
readelf-wlp2
为空,则必须存在引用L1的其他共享库。使用共享的
(gdb)信息
,并对它们进行检查。