• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

268
Vistas
Error de referencia indefinida de gcc en Ubuntu

Tengo un problema extraño y he pasado por todas las preguntas similares pero no puedo encontrar una respuesta.

Estoy tratando de compilar un código que sigue arrojando un error de referencia indefinido a pesar de que la biblioteca se especifica usando -l y también está en LD_LIBRARY_PATH. No puedo entender la razón. Aquí hay un ejemplo

gcc -L/inicio/sam/gmdb/lib -L/inicio/sam/db/complementos/lib -L/inicio/sam/convert/lib -L/inicio/sam/rtana/lib -L/inicio/ sam/rtana/add-ons/lib -o /home/sam/gmdb/bin/server /home/sam/db/obj/tools/server/server.o /home/sam/db/obj/tools/common/ tool_data_parse.o /home/sam/db/obj/tools/common/tool_param.o /home/sam/gmdb/obj/tools/common/tool_public.o -lgmcommon -L/home/sam/db/add-ons/ vpp/lib/suse -lipsi_crypto -lipsi_osal -lipsi_pse -lipsi_ssl -lgmmd5 -lgmkernel -lgmpl -lgmrep -lgmsqlserver -lgmsqlclient -lconvert -lrtana -lglog -lgflags -lprotobuf -lre2 -lboost_timer -lnuma -lpthread -lm -lrt

La lista de errores indefinidos es larga pero el primero es

/home/usama/convert/lib/libconvert.so: referencia indefinida a `numa_num_configured_cpus'

Entonces, como puede ver, se queja de un método en libnuma. A libnuma se le proporciona un -lnuma como puede ver, y está presente en /usr/lib

El error menciona libconvert, que es solo una biblioteca compartida que tiene una llamada a numa_num_configured_cpus pero no está vinculada con libnuma, y no debería importar, ya que libconvert es solo un archivo so. Proporciono el -lnuma mientras genero el ejecutable como puede ver arriba. Aquí está el nm en libconvert

 nm -C -u convert/lib/libconvert.so | grep numa* U google::protobuf::internal::NameOfEnum(google::protobuf::EnumDescriptor const*, int) U numa_num_configured_cpus U numa_num_configured_nodes

Intenté compilar con --unresolved-symbols, lo que da como resultado una compilación exitosa, pero el binario no se ejecuta nuevamente y se queja de símbolos indefinidos.

Mi versión de GCC es

 gcc --version gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Y Ubuntu es Ubuntu 12.10 de 64 bits

¿Alguien tiene una pista si estoy golpeando un error o lo que está pasando?

about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Chicos gracias por sus comentarios. El problema que encontré se debe a que el comportamiento predeterminado de gcc se cambia en Ubuntu (al menos la versión que estoy usando) La sugerencia está en esta página wiki de debian https://wiki.debian.org/ToolChain/DSOLinking

De acuerdo con esto, el gcc se cambia para agregar --según sea necesario al enlazador. La desventaja de este comportamiento es que y cito la wiki "Los binarios, que usan símbolos de una biblioteca compartida indirectamente vinculada, no podrán vincularse".

Este era exactamente el problema conmigo, ya que libconvert usaba libnuma, pero no estaba vinculado a él, y el binario que estaba creando intentaba vincularlo todo, incluidos libconvert y libnuma. El gcc predeterminado funcionaría porque no usa un comportamiento necesario que se cambia en Debian y también se hizo en Ubuntu.

En resumen, la vinculación funciona si agrego -Wl,--no-as-needed .

gcc -Wl,--no-según sea necesario -L/home/sam/gmdb/lib -L/home/sam/db/add-ons/lib -L/home/sam/convert/lib -L/home/ sam/rtana/lib -L/home/sam/rtana/add-ons/lib -o /home/sam/gmdb/bin/server /home/sam/db/obj/tools/server/server.o /home/ sam/db/obj/tools/common/tool_data_parse.o /home/sam/db/obj/tools/common/tool_param.o /home/sam/gmdb/obj/tools/common/tool_public.o -lgmcommon -L/ home/sam/db/add-ons/vpp/lib/suse -lipsi_crypto -lipsi_osal -lipsi_pse -lipsi_ssl -lgmmd5 -lgmkernel -lgmpl -lgmrep -lgmsqlserver -lgmsqlclient -lconvert -lrtana -lglog -lgflags -lprotobuf -lre2 -lboost_timer - lnuma -lpthread -lm -lrt

about 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda