Я знаю этот вопрос, но, похоже, он не работает для меня.
Для настройки возьмите простую программу на С++ 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: ОК, задержите предыдущее обновление. У меня есть источники библиотеки сейчас, но, хотя верно, что стандартная библиотека поставляется с отладочными символами, у меня нет отдельной сборки отладки. Является ли такая сборка доступной и как я могу связать ее?