solucion c++ c gcc linker undefined-reference

solucion - undefined reference to class function c++



gcc: referencia indefinida a (2)

Me gustaría compilar esto.

programa.c

#include <libavcodec/avcodec.h> int main(){ int i = avpicture_get_size(AV_PIX_FMT_RGB24,300,300); }

Ejecutando esto

gcc -I$HOME/ffmpeg/include program.c

da error

/tmp/ccxMLBme.o: In function `main'': program.c:(.text+0x18): undefined reference to `avpicture_get_size'' collect2: ld returned 1 exit status

Sin embargo, se define avpicture_get_size. ¿Por qué está pasando esto?


Sin embargo, se define avpicture_get_size.

No, ya que el encabezado ( <libavcodec/avcodec.h> ) simplemente lo declara .

La definición está en la biblioteca misma.

Por lo tanto, es posible que desee agregar la opción del vinculador para vincular libavcodec al invocar gcc:

-lavcodec

Tenga en cuenta también que las bibliotecas deben especificarse en la línea de comando después de los archivos que las necesitan:

gcc -I$HOME/ffmpeg/include program.c -lavcodec

No así:

gcc -lavcodec -I$HOME/ffmpeg/include program.c

Actualizar:

En referencia al Wyzard de Wyzard , el comando completo podría verse así:

gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec

Para las bibliotecas que no están almacenadas en la ubicación estándar de los enlazadores, la opción -L especifica una ruta de búsqueda adicional para las bibliotecas de búsqueda especificadas utilizando la opción -l , que es libavcodec.xyz en este caso.

Para obtener una referencia detallada sobre la opción del enlazador de gcc, lea aquí .


¿Estás mezclando C y C ++? Un problema que puede ocurrir es que las declaraciones en el archivo .h para un archivo .c deben estar rodeadas por:

#if defined(__cplusplus) extern "C" { // Make sure we have C-declarations in C++ programs #endif

y:

#if defined(__cplusplus) } #endif