GDB находит заголовки из разных мест - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть два положения заголовка наддува L1 и L2. L1 - это местоположение по умолчанию, которое может найти gcc, а L2 - нет. При компиляции разделяемой библиотеки я явно использовал -IL2.

Две программы P1 и P2 вызывают общую библиотеку.

При отладке P1 заголовки в L2 используются GDB. Это ожидается. Но при отладке P2 заголовки в L1 используются GDB ...

Я предположил, что все символы и места отладки определяются во время компиляции. Если исходный код не перемещен, GDB может найти их автоматически. И L1 также не находится в исходном пути GDB. Как GDB может найти разные места?

1 Ответ

0 голосов
/ 27 апреля 2018

Как GDB может находить разные локации?

Вероятно, что P1 не сам использует Boost, но P2 делает.

Вы можете подтвердить это с помощью readelf -wl P1 | grep L1 и readelf -wl P2 | grep L1.

Если вторая команда приводит к непустому выводу, у вас есть нарушение ODR, и ваша программа может иметь множество неопределенных поведений (в том числе появляется для правильной работы, но не работает для правильных незначительных изменений в программа или библиотека).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...