Soy consciente de this question, pero no parece funcionar para mí.¿Cómo vincular contra las versiones de depuración de libc y libstdC++ en GCC?
Para la configuración, echar un sencillo programa en C++, hw.cpp
, dada por: int main() { }
Al compilar con g++ -o hw hw.cpp -O0 -g
en Linux, corriendo ldd ./hw
da:
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)
Ahora también parecen tener bibliotecas de depuración en /usr/lib/debug/lib/tls/i686/cmov/
, que imagino son las compilaciones de depuración correspondientes de las bibliotecas del sistema.
Pregunta: ¿Cómo puedo compilar mi programa para que se vincula en contra de la versiones de depuración de las bibliotecas estándar de C y/o C++, libc
/libm
/libstdc++
, compartido o estática? Para la compilación compartida, quiero que la salida de ldd ./hw
apunte al directorio de depuración.
(Antecedentes: Una de las bibliotecas compartidas que se utiliza por mi proyecto se indica como fugas ("todavía alcanzable") por Valgrind, pero los orígenes no están en la biblioteca compartida en sí, sino en el código de tipo dlopen (see here ..) Así que pensé que si yo puedo recorrer el _Start()
invocación en el CRT que podría ser capaz de rastrear el culpable)
actualización/corrección: Creo que estaba muy, muy estúpida - la depuración las bibliotecas probablemente siempre se han vinculado como se desea desde el principio. Estaba confundido por el depurador que no muestra nada mientras paso, que es porque no tengo el código fuente para las bibliotecas.
Actualización II: OK, asegure la actualización anterior. Tengo las fuentes de la biblioteca ahora, pero si bien es cierto que la biblioteca estándar se envía con los símbolos de depuración , no parece tener una depuración separada compilación. ¿Está disponible una versión de este tipo, y cómo podría vincularla?
¿Probablemente sepa que algunas implementaciones de bibliotecas estándar usan pools para la asignación rápida? http://valgrind.org/docs/manual/faq.html#faq.undeferrors –
@honk: Estoy completamente feliz de aceptar que esto no es una preocupación genuina. Me molesta que el código de un tercero pueda causar advertencias en el código * my * (tenga en cuenta que solo hay referencias a algunos espurios '.c' archivos que en realidad no tengo, * no * a una biblioteca compartida) que parece que no puedo suprimir ... Al menos con un depurador CRT espero verlo mejor. –