Подтвердить что ты не робот

Как связать с debug-версиями libc и libstdС++ в GCC?

Я знаю этот вопрос, но, похоже, он не работает для меня.

Для настройки возьмите простую программу на С++ hw.cpp, заданную: int main() { }

После компиляции с g++ -o hw hw.cpp -O0 -g в Linux запуск ldd ./hw дает:

    linux-gate.so.1 =>  (0x003e5000)
    libstdc++.so.6 => /usr/local/lib/libstdc++.so.6 (0x007c5000)
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x006a4000)
    libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x00a40000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00a93000)
    /lib/ld-linux.so.2 (0x00a0f000)

Теперь у меня также есть библиотеки отладки в /usr/lib/debug/lib/tls/i686/cmov/, которые, я думаю, представляют собой соответствующие отладочные сборки системных библиотек.

Вопрос:. Как скомпилировать мою программу, чтобы она была связана с сборками отладки стандартных библиотек C и/или С++, libc/libm/libstdc++, shared или статический? Для общей сборки я хочу, чтобы вывод ldd ./hw указывал на каталог отладки.

(Предыстория: одна из разделяемых библиотек, используемая моим проектом, сообщается как утечка ( "все еще достижимая" ) Valgrind, но исходные данные находятся не в самой общей библиотеке, а в коде типа dlopen (см. здесь). Поэтому я подумал, что если я смогу выполнить вызов _Start() в CRT, я мог бы проследить виновника. )суб >

Обновление/исправление: Я думаю, что я был очень и очень глупым - библиотеки отладки, вероятно, всегда были связаны по желанию. Я был сбит с толку отладчиком, который ничего не показывал при шаге, потому что у меня нет исходного кода для библиотек.

Обновление II: ОК, задержите предыдущее обновление. У меня есть источники библиотеки сейчас, но, хотя верно, что стандартная библиотека поставляется с отладочными символами, у меня нет отдельной сборки отладки. Является ли такая сборка доступной и как я могу связать ее?

4b9b3361

Ответ 1

Во многих установках Linux библиотеки отладки не содержат реального кода; они содержат только информацию об отладке. Эти две части разделены, поэтому вы можете не устанавливать их, если они вам не нужны, и вам не хватает места на диске, но библиотеки отладки не подходят сами по себе.

GDB обычно предварительно сконфигурирован для поиска библиотек отладки, когда они вам понадобятся.

Конечно, ваша система может отличаться. Вы не говорите, что это такое.

Ответ 2

Ваша программа связана с debug libs.

Только "ldd./hw" находит libstdС++ в стандартном расположении. Для этого вам нужно изменить LD_LIBRARY_PATH, чтобы загрузить отладочные библиотеки для загрузки и ldd, чтобы найти их правильно.