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

380
Visualizações
referencia indefinida a conj, conjf, conjl

No puedo encontrar la manera de solucionar este problema de vinculación en GCC.
Estoy ejecutando CodeBlocks 13.12, bajo Windows 8, GCC+MingWG 4.8.1.
He creado un proyecto que tiene dos archivos:

C Principal

 #include <complex.h> int main(void) { double complex (*FUNC)(double complex) = conj; return 0; }

prueba.c

 #include <complex.h> double complex (*CEXP)(double complex) = cexp; double complex (*CONJ)(double complex) = conj;

Cuando el proyecto se compila en CodeBlocks (solo uso la opción de compilación -std=c11 ),
se produce un error que dice: "Referencia indefinida a conj".

Creo que esto es extraño, ya que la función conj está definida en complex.h , como lo está la función cexp , pero la referencia a cexp parece funcionar bien.

Por otro lado, el error no se dispara por la referencia a conj en el archivo main.c.
(LO SENTIMOS: parece que el error también se activa en main.c)

¿Es este un problema particular de GCC?
¿Cómo debo configurar CodeBlocks para solucionar este problema?
Gracias por adelantado.

Más información. La ventana del compilador muestra estas líneas en CodeBlocks:

mingw32-gcc.exe -Wall -g -std=c11 -g -std=c11 -c C:\Users\Machine\Desktop\myapp\myapp.c -o obj\Debug\myapp.o
mingw32-gcc.exe -Wall -g -std=c11 -g -std=c11 -c C:\Users\Machine\Desktop\myapp\test.c -o obj\Debug\test.o
mingw32-g++.exe -o bin\Debug\myapp.exe obj\Debug\myapp.o obj\Debug\test.o
obj\Debug\myapp.o: En la función main': C:/Users/Machine/Desktop/myapp/myapp.c:9: undefined reference to conj' obj\Debug\test.o:test.c:(.data +0x4): referencia indefinida a `conj' collect2.exe: error: ld devolvió 1 estado de salida

TAMBIÉN: He intentado escribir la opción -lm en varios lugares en CodeBlocks sin ningún éxito (por ejemplo, en Configuración/Compilador/Otras opciones, o Configuración/Compilador/Enlazador, o Proyecto/Opciones de compilación..., etc. ).

ADEMÁS: MinGW32 define la función conj como "en línea" en complex.h . Sospecho que este podría ser el problema, pero usar la opción -fno-inline no tiene ningún efecto.

Programa NM: siguiendo la sugerencia de o11c , utilicé el programa nm . Se obtiene la siguiente salida:

 <snip, not what was needed>
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Bien, creo que veo dónde está tu problema ahora; está tratando de tomar las direcciones de punto de entrada de conj() y cexp() , que funciona para cexp() , pero no para conj() . La explicación es que cexp() es una función externa real, para la cual puede obtener una dirección, pero, si está utilizando un mingwrt-3.x anterior mingwrt-3.21 (o cualquier mingwrt-4.x release), conj() se implementa como __inline__ , sin una implementación externa correspondiente, por lo que no hay forma de obtener su dirección.

He solucionado este problema en mingwrt-3.21 , por lo que debe asegurarse de estar usando eso (preferiblemente la mingwrt-3.21.1 ).

over 4 years ago · Santiago Trujillo Relatório

0

También convertí mi comentario sobre la respuesta de Keith Marshall en una respuesta (ya que es demasiado largo para un comentario):

Según la respuesta de Keith Marshall, el problema es que están en línea y que gcc no está produciendo una versión no en línea.

Para evitar esto, agregue

 static double complex conj_ (double complex a) { return conj (a); }

etc. - puede tomar las direcciones de estos, y si alguna vez conj de estar en línea, la función debería optimizarse a una dirección simple de conj .

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