Je voudrais compiler ceci.
programme.c
#include <libavcodec/avcodec.h>
int main(){
int i = avpicture_get_size(AV_PIX_FMT_RGB24,300,300);
}
Courir cette
gcc -I$HOME/ffmpeg/include program.c
donne une erreur
/tmp/ccxMLBme.o: In function `main':
program.c:(.text+0x18): undefined reference to `avpicture_get_size'
collect2: ld returned 1 exit status
Cependant, avpicture_get_size est défini. Pourquoi cela arrive-t-il?
Cependant, avpicture_get_size est défini.
Non, comme en-tête (<libavcodec/avcodec.h>
) just le déclare .
La définition se trouve dans la bibliothèque elle-même.
Donc, vous voudrez peut-être ajouter l'option de l'éditeur de liens pour lier libavcodec
lors de l'appel de gcc:
-lavcodec
Veuillez également noter que les bibliothèques doivent être spécifiées sur la ligne de commande après les fichiers qui en ont besoin:
gcc -I$HOME/ffmpeg/include program.c -lavcodec
Pas comme ceci:
gcc -lavcodec -I$HOME/ffmpeg/include program.c
Mise à jour:
En faisant référence au commentaire de Wyzard, la commande complète pourrait ressembler à ceci:
gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec
Pour les bibliothèques non stockées dans l'emplacement standard des lieurs, l'option -L
spécifie un chemin de recherche supplémentaire pour les bibliothèques de recherche spécifiées à l'aide de la commande -l
option, c’est libavcodec.x.y.z
dans ce cas.
Pour une référence détaillée sur l'option de l'éditeur de liens de gcc, veuillez lire ici .
Est-ce que vous mélangez C et C++? Un problème qui peut survenir est que les déclarations dans le fichier .h pour un fichier .c doivent être entourées par:
#if defined(__cplusplus)
extern "C" { // Make sure we have C-declarations in C++ programs
#endif
et:
#if defined(__cplusplus)
}
#endif