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

383
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 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