Jak naprawić niezdefiniowane odwołanie do _imp __ *?

Próbuję skompilować coś, co zależy od gtkspell, które zależy od enchantu, w MinGW. Mam takie błędygtkspell/gtkspell.c:757: undefined reference to '_imp__enchant_broker_init' Podejrzewam, że jest to spowodowane faktem, że próbuję połączyć againt z {statyczną, dynamiczną} biblioteką, gdy powinienem się łączyć z drugą, albo dlatego, że przed impem jest tylko jeden podkreślnik i powinny być dwa; dostaję

<code>$ 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
</code>

i

<code>$ 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
</code>

Internet (http://lists.freedesktop.org/archives/gstreamer-devel/2007-January/013975.html) sugeruje, że zniekształcenie imp pochodzi

<code>_declspec(dll{import,export})
</code>

choć enchant wydaje się używać

<code>__declspec(dll{import,export})
</code>

, a komentowanie odpowiednich wierszy w enchant.h powoduje żądanie gtkspell.cenchant_broker_init zamiast_imp__enchant_broker_init, ale nie zmienia symboli, które pojawiają się w libenchant. Czy istnieje sposób, aby gcc nie zmieniał nazw, czy też ktoś ma pomysły na to, co może pójść źle / jak to naprawić?

Oto minimalny przykład odtwarzający problem w moim systemie:

Jeśli mam plik enchanttest1.c z zawartością

<code>#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;
}
</code>

i plik enchanttest2.c z zawartością

<code>#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;
}
</code>

następnie

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

dajeEnchant found ale

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

daje

<code>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
</code>

questionAnswers(1)

yourAnswerToTheQuestion