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