Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

312
Visualizações
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?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

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

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda