Comment puis-je corriger une référence non définie à _imp __ *?

Je suis en train de compiler quelque chose qui dépend de gtkspell, qui
dépend de l'enchantement, sous MinGW. J'ai des erreurs comme
gtkspell/gtkspell.c:757: undefined reference to '_imp__enchant_broker_init'
Je suppose que c'est soit à cause du fait que je suis en train de lien
contre un {statique,dynamique} bibliothèque, quand je devrais être de se lier à l'
d'autres, ou parce qu'il n'y a qu'un trait de soulignement avant la pmi et de la
il devrait y avoir deux; je obtenir

$ objdump -t /d/opt/enchant-1.6.0/lib/libenchant.a | grep enchant_broker_init
[ 85](sec  1)(fl 0x00)(ty  20)(scl   2) (nx 0) 0x00002ac0 _enchant_broker_init

et

$ objdump -t /d/opt/enchant-1.6.0/lib/libenchant.dll.a | grep enchant_broker_init
[  6](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 _enchant_broker_init
[  7](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 __imp__enchant_broker_init

Internet
(http://lists.freedesktop.org/archives/gstreamer-devel/2007-January/013975.html)
suggère que l'imp mangling vient de

_declspec(dll{import,export})

si enchantement semble utiliser

__declspec(dll{import,export})

et en commentant les lignes correspondantes dans l'enchantement.h fait gtkspell.c
demande enchant_broker_init plutôt que _imp__enchant_broker_init, mais
ne change pas les symboles qui apparaissent dans libenchant. Est-il un moyen
pour faire gcc ne pas marquer les noms, ou quelqu'un a des idées sur ce
peut-être aller mal/comment résoudre ce problème?

Voici un exemple minimal qui reproduit le problème sur mon système:

Si j'ai un fichier enchanttest1.c avec le contenu

#include <stdio.h>
#include <enchant.h>

int main()
{
#ifdef ENCHANT_MODULE_EXPORT
    printf("\nEnchant found\n");
#else
    printf("\nEnchant not found\n");
#endif
    return 0;
}

et un fichier enchanttest2.c avec le contenu

#include <stdio.h>
#include <enchant.h>

int main()
{
    EnchantBroker *b = enchant_broker_init();
#ifdef ENCHANT_MODULE_EXPORT
    printf("\nEnchant found\n");
#else
    printf("\nEnchant not found\n");
#endif
    return 0;
}

puis

gcc enchanttest1.c `pkg-config --cflags enchant` && ./a.exe

donne Enchant found mais

gcc enchanttest2.c `pkg-config --cflags enchant` && ./a.exe

donne

C:\Users\JASONG~1\AppData\Local\Temp\ccyDLptc.o:testenchant.c:(.text+0xf): undefined reference to `_imp__enchant_broker_init'
collect2: ld returned 1 exit status

source d'informationauteur Jason Gross