[C] posix_memalign, comment savoir si il est present....

posix_memalign, comment savoir si il est present.... [C] - C - Programmation

Marsh Posté le 06-09-2004 à 20:36:34    

Bonjour a tous,  
 
Voila j'ai un code qui peut tourner sur plusieurs machines (toutes sous unix/linux avec des versions de linux differentes ) et j'ai besoin de savoir si la fonction posix_memalign est disponible...
 
Donc pour cela je me suis dit je vais faire un man posix_memalign et la je remarque les indications suivantes qui me semblent repondre a ma question
SYNOPSIS  
 
#define _XOPEN_SOURCE 600
#include <stdlib.h>
 
int posix_memalign(void **memptr, size_t alignment, size_t size);
 
et a la fin
Everybody agrees that posix_memalign() is declared in <stdlib.h>. In order to declare it, glibc needs _GNU_SOURCE defined, or _XOPEN_SOURCE defined to a value not less than 600.
 
Donc dans mon code j'ai rajouté

Code :
  1. #if defined(_GNU_SOURCE)
  2.   /* ce que je veux faire dans ce cas */
  3. #endif
  4. #elif defined(_XOPEN_SOURCE)
  5.   #if (_XOPEN_SOURCE >= 600 )
  6.   /* ce que je veux faire dans ce cas */
  7.   #elif
  8.   /* ce que je veux faire dans ce cas */
  9.   #endif
  10. #else
  11. /* ce que je veux faire dans ce cas */
  12. #endif


 
or il se trouves que la compilation avec gcc me sorts que ni _GNU_SOURCE ni _XOPEN_SOURCE ne sont definis (je le vois en faisant un gcc -E -dM )et pourtant si dans le code je fais un appel a posix_memalign la fonction est bien reconnue et marche nickel... :??:  
 
donc voila je voudrais savoir d'ou cela peut venir, sachant que en regardant dans stdlib.h je n'ai pas vu d'autre "moyen" qui permettent de definir posix_memalign ...
 
merci d'avance
 
GuiYom

Reply

Marsh Posté le 06-09-2004 à 20:36:34   

Reply

Marsh Posté le 06-09-2004 à 21:03:56    

c'est à toi le définir. gcc -Dmachin

Reply

Marsh Posté le 06-09-2004 à 21:07:34    

ok merci...
mais dans ce cas pourquoi cela marche meme quand il est pas defini?
 
et n'y a t il pas un autre moyen car, si je fais un make en mettant gcc -Dmachin alors gcc pourrait toujours croire que posix_memalign existe et si il est pas present sur la machine => probleme lors du linkage mais bon tant pis, si il y a pas de moyen de le savoir alors je ferais avec...

Reply

Marsh Posté le 06-09-2004 à 21:23:13    

non pas de problème au linkage. si tu dis à gcc de gueuler, s'il trouve pas cette fonction, ça compilera pas.
 
un moyen de savoir ? ben avec les autotools, ça ne fait rien d'autre que des tests avec de compiler le projet en entier/

Reply

Marsh Posté le 06-09-2004 à 23:25:59    

oki re thanks ;)
 
je vais me renseigner concernant les autotools et je vais aussi verifier que gcc gueule bien si il le faut :)

Reply

Marsh Posté le 07-09-2004 à 00:41:38    

un truc genre 'ne pas fermer'

Reply

Sujets relatifs:

Leave a Replay

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