symboles faibles et écrasement au link (ffmpeg)

symboles faibles et écrasement au link (ffmpeg) - C++ - Programmation

Marsh Posté le 04-05-2011 à 12:23:25    

hello,
 
Je suis en train de jouer avec ffmpeg que j'ai recompilé (sous MSYS, donc via un GCC) et je l'utilise dans un projet compilé sous Visual Studio 2005 en C++.
 
Jusque là, tout se passait bien, mais j'ai noté une petite fuite mémoire, donc, pour la tracker, j'ai voulu remplacer les symboles av_malloc, av_realloc et av_free comme prévu dans la lib ffmpeg.
 
Voilà la déclaration des symboles :

Code :
  1. void *av_malloc(FF_INTERNAL_MEM_TYPE size) av_malloc_attrib av_alloc_size(1);
  2. void *av_realloc(void *ptr, FF_INTERNAL_MEM_TYPE size) av_alloc_size(2);
  3. void av_free(void *ptr);


 
du coup, j'ai fait mon implémentation assez logiquement :

Code :
  1. extern "C"
  2. {
  3. void *av_malloc( size_t iSize ) { /* ... */ }
  4. void *av_realloc( void *pData, size_t iSize ) { /* ... */ }
  5. void av_free(void *pData) { /* ... */ }
  6. }


 
Et donc, je n'attrappe que les appels à av_free. Ce qui semble donc gêner, ce sont les attributs sur av_malloc et av_realloc qui sont en fait des __attribute__((__malloc__)) et __attribute__((alloc_size(n))) après préprocesseur.
 
Il me semblait que ces attributs servaient seulement à des questions d'optimisation, donc je ne vois pas en quoi ca change quelqeu chose au niveau du linker.
 
Ca vous parle ?
 
 
Edit : Au cas où certains se le demanderaient, je compile en __cdecl par défaut
Edit 2 : FF_INTERNAL_MEM_TYPE correspond soit à unsigned int (vieille version du compilo ou de la lib) soit à size_t (version actuelle). En testant avec les deux, j'obtiens les mêmes résultats de toute façon.


Message édité par theshockwave le 04-05-2011 à 12:36:12

---------------
last.fm
Reply

Marsh Posté le 04-05-2011 à 12:23:25   

Reply

Marsh Posté le 04-05-2011 à 14:19:15    

Bon, je me réponds tout seul, du coup, je me suis fait avoir comme un débutant : je link avec des libs statiques pour utiliser ffmpeg, mais ce ne sont que des interfaces vers les dll de ffmpeg. Du coup, mes symboles ne peuvent pas remplacer ceux de ffmpeg, sans surprise. La solution passera donc par une recompilation de ffmpeg en lib statique.


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed