Forum Programmation.c Soucis pour compiler xvidcap...

Posté par  .
Étiquettes : aucune
0
23
fév.
2007
Bonjour,
alors voilà, je ne fais pas cette demande pour qu'on critique le fait que je veuille utiliser la version source d'xvidcap, mais parce que j'aimerai bien comprendre pourquoi il ne veut pas se compiler.
Il est fourni avec sa propre version de ffmpeg. Si je désactive l'option de configure qui va bien, de façon à utiliser celle du système, j'ai une erreur curieuse lors de la compilation du fichier codecs.c :
$ ./configure ---without-forced-embedded-ffmpeg --prefix=/usr && make

codecs.c:351: erreur: un élément de l'initialisation n'est pas une constante
codecs.c:351: erreur: (près de l'initialisation de « xvc_formats[1].num_extensions »)


Je suis donc allé fouiller un peu dans le code de codecs.c, et la ligne qui pose problème est la suivante :
XVC_ARRAY_LENGTH (extension_xwd)

Il s'agit d'un appel à une macro définie comme suit dans codecs.h :
define XVC_ARRAY_LENGTH(a) ( a == NULL ? 0 : sizeof(a) / sizeof(a[0]) )

Pour parfaire le tout, j'ai écrit ce petit programme en c, sans prétention :

#include <stdio.h>
#define XVC_ARRAY_LENGTH(a) ( a == NULL ? 0 : sizeof(a) / sizeof(a[0]) )
static const char *extension_xwd[] = { "xwd" };

int main ()
{
printf ("Taille calculée : %d\n", XVC_ARRAY_LENGTH (extension_xwd));
return (0);
}



Ce programme compile et fonctionne. Il m'affiche 1....
Ce que je ne comprends pas, c'est que ce programme fonctionne sans erreurs, et les appels et déclarations sont effectués exactement dans le même ordre que dans les sources de xvidcap...
La seule différence, peut-être de taille, est que l'appel à la macro est fait dans le printf dans mon programme, alors qu'il est effectué lors de la déclaration d'une structure dans codecs.c.
Peut-être est-ce là que ça pose problème, mais mes maigres connaissances en C ne me permettent pas de résoudre le problème....
Du coup, j'ai édité le fichier codecs.c et remplacé l'appel à cette macro par la valeur affichée par mon programme, et là, ça compile jusqu'au bout...

Si jamais je voulais utiliser le ffmpeg fourni avec xvidcap, ce serait pire, car le ./configure fourni avec xvidcap ne passe aucune option au ffmpeg qu'il contient, et ce couillon :
1) ne se compile pas
2) génère plein d'erreurs avec le même problème que ci-dessus
3) est compilé par défaut sans la moindre librairie de mon système (vorbis, ogg, etc.)... et donc, est incapable de faire quoi que ce soit....

Enfin, je n'ai pas trouvé comment procéder pour soit pour qu'xvidcap supporte le png (ou tout du moins autre chose que le format xwd), soit pour que mon ffmpeg supporte le format xwd...
Si une âme charitable passe par là et voit comment résoudre mon problème, soit de compilation, soit de configuration de l'un ou l'autre des deux outils que je veux utiliser, je suis preneur !

Enfin, il semble, après lecture en diagonale du source de codecs.c et du configure de la racine d'xvidcap que le support de formats d'images autres que xwd soit lié à l'utilisation du ffmpeg fourni avec....
C'est bien glauque tout ça...
Pour information, si toutefois ça peut avoir la moindre utilité pour m'aider dans ma démarche :

gcc -v
Lecture des spécification à partir de /usr/lib/gcc/i686-pc-linux-gnu/3.4.3/specs
Configuré avec: ../gcc-3.4.3/configure --prefix=/usr --libexecdir=/usr/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++
Modèle de thread: posix
version gcc 3.4.3


xvidcap version 1.1.5RC1
Je tourne sous LFS, avec un kernel 2.6.19 fait maison, sur un PC portable Lifebook 7020.
J'ai installé tout ce que j'ai pu trouver ici :
http://www.pimswiki.org/index.php?title=Xvidcap
qui semble utile au bon fonctionnement d'xvidcap.
Last but not least, lors du make, gcc est appelé avec ces options :
-DHAVE_CONFIG_H -Wall -g -g -O2 -MT codecs.o -MD -MP -MF -c -o codecs.o codecs.c
(Après avoir élagué les -I, y'en a toute une chiée...)
Merci de m'avoir lu et surtout de me fournir au moins des explications sur cet étrange comportement de gcc...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.