Je ne suis pas sûr que ce soit la meilleure façon de faire, puisque vous incluez un symbole getopt_long
dans votre exécutable qui était également lié à la bibliothèque standard C, y compris un symbole getopt_long
. Les deux symboles peuvent ne pas être résolus correctement. Cependant, vous pouvez essayer d'éditer manuellement config.h
et de supprimer le #define HAVE_GETOPT_LONG
.
Une meilleure approche pourrait consister à écrire quelque chose de code comme ceci:
#ifdef HAVE_GETOPT_LONG
inline
#endif
int
getopt_long_wrapper (int argc, char * const *argv, const char *shortopts,
const struct option *longopts, int *indexptr)
{
#ifdef HAVE_GETOPT_LONG
return getopt_long (argc, argv, shortopts, longopts, indexptr);
#else
/* your replacement function here */
#endif
}
Ensuite, si vous avez supprimé la définition HAVE_GETOPT_LONG
, il n'y aurait pas de conflit de symboles.
Ce que vous voulez faire n'est pas clair. Essayez-vous de remplacer le système 'getopt_long' par votre propre implémentation? – ptomato
Vous avez raison. Ma question n'était pas très claire. C'est un shop getopt_long pour les systèmes sans cela. Je voulais tester si cela fonctionnait sur un système * avec * getopt_long. Donc, je voulais un moyen d'obtenir autoconf pour penser qu'il n'est pas disponible. Est-ce possible, le savez-vous? –
Vous voulez dire, juste une fois pour vous assurer que cela fonctionne, ou définitivement parce que vous voulez écrire un test automatisé pour votre implémentation de getopt_long? – ptomato