Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

286
Vistas
Haga que GNU ld o GNU gold muestren qué archivos .o en un archivo se utilizan

Estoy tratando de vincular un binario de C++, pero obtengo errores de símbolos indefinidos. Mi binario no debería necesitar esos símbolos, y me gustaría entender la cadena de dependencia que hace que el enlazador (GNU ld o GNU gold) piense que son necesarios. Hay libfoo.a que contiene cientos de archivos .o . Mi programa está llamando a la función en libfoo.a . Me gustaría obtener un gráfico de dependencia que contenga todos los archivos .o en libfoo.a que el enlazador cree que son necesarios para vincular mi programa.

Lo necesito porque sospecho que hay un error en algún lugar de libfoo.a , funciones de llamada que no son realmente necesarias. Puedo modificar el código fuente de libfoo.a (y así eliminar las llamadas innecesarias), y para eso necesito entender dónde están las llamadas innecesarias. El gráfico de dependencia podría ayudarme a encontrarlo.

Tenga en cuenta que no hay un ejecutable resultante debido a los símbolos indefinidos.

Tenga en cuenta que mi objetivo final no es construir este binario en particular, sino asegurarme de que las funciones innecesarias no se llamen en libfoo.a .

Miré man ld , pero no pude encontrar ningún indicador de línea de comando que pudiera darme una salida más detallada.

Ejemplo de error del enlazador:

 libfoo++.a(foo1.o):foo1.cc:function foo1f: error: undefined reference to 'bar'

¿Cómo averiguo qué causó que foo1.o se vinculara al ejecutable? (Para mí, está bien que la bar no esté definida, porque no la necesito. Mi problema es que se necesita foo1.o , pero no debería ser así, y me gustaría eliminar la llamada que provocó que foo1.o estar vinculado.)

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Me gustaría obtener un gráfico de dependencia que contenga todos los archivos .o en libfoo.a que el enlazador cree que son necesarios para vincular mi programa.

El mapa del enlazador, impreso con el indicador -M (o --print-map ) contiene exactamente esa información. Si está utilizando un controlador de compilación (p. ej., gcc ) para realizar el enlace (debe hacerlo), agregue -Wl,-M a la línea de enlace.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda