Portál AbcLinuxu, 8. prosince 2025 02:41
Stáhnul jsem GNU MDK 1.2.7. Rozbalil jsem archiv a vytvořil adresář pro sestavení a přepnul se do adresáře pro sestvení. configure --prefix=/usr/local bez chyby. Ale po make vyskočilo klubko chyb:
In file included from ../../mdk-1.2.7/mixlib/mix_vm_command.c:23:0:
../../mdk-1.2.7/mixlib/xmix_vm_command.h:80:3: error: unknown type name ‘GCompletion’
GCompletion *completions; /* command completion list */
^
../../mdk-1.2.7/mixlib/mix_vm_command.c:94:1: error: unknown type name ‘GCompletion’
static GCompletion *
^
../../mdk-1.2.7/mixlib/mix_vm_command.c: In function ‘make_completions_’:
../../mdk-1.2.7/mixlib/mix_vm_command.c:100:3: error: unknown type name ‘GCompletion’
GCompletion *completions = g_completion_new (NULL);
^
../../mdk-1.2.7/mixlib/mix_vm_command.c:100:3: warning: implicit declaration of function ‘g_completion_new’ [-Wimplicit-function-declaration]
../../mdk-1.2.7/mixlib/mix_vm_command.c:100:30: warning: initialization makes pointer from integer without a cast [enabled by default]
GCompletion *completions = g_completion_new (NULL);
^
../../mdk-1.2.7/mixlib/mix_vm_command.c:103:3: warning: implicit declaration of function ‘g_completion_add_items’ [-Wimplicit-function-declaration]
g_completion_add_items (completions, cmds);
^
../../mdk-1.2.7/mixlib/mix_vm_command.c: In function ‘mix_vm_cmd_dispatcher_delete’:
../../mdk-1.2.7/mixlib/mix_vm_command.c:242:3: warning: implicit declaration of function ‘g_completion_free’ [-Wimplicit-function-declaration]
g_completion_free (dis->completions);
^
../../mdk-1.2.7/mixlib/mix_vm_command.c: In function ‘mix_vm_cmd_dispatcher_complete’:
../../mdk-1.2.7/mixlib/mix_vm_command.c:277:3: warning: implicit declaration of function ‘g_completion_complete’ [-Wimplicit-function-declaration]
result = g_completion_complete (dis->completions, cp, prefix);
^
../../mdk-1.2.7/mixlib/mix_vm_command.c:277:10: warning: assignment makes pointer from integer without a cast [enabled by default]
result = g_completion_complete (dis->completions, cp, prefix);
^
make[3]: *** [mix_vm_command.o] Error 1
make[3]: Leaving directory `/home/rotor/AUR/build-mdk/mixlib'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/rotor/AUR/build-mdk/mixlib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/rotor/AUR/build-mdk'
make: *** [all] Error 2
Četl jsem, že GCompletion je "deprecated". gcompletion.h se nachází v adresáři /usr/include/glib-2.0/glib/deprecated. GCompletion tam přímo není, je tam:
struct _GCompletion
{
GList* items;
GCompletionFunc func;
gchar* prefix;
GList* cache;
GCompletionStrncmpFunc strncmp_func;
};
Co znamená to podtržítko před názvem? Zkoušel jsem upravit zdrojáky mdk tak, že jsem nahradil GCompletion za _GCompletion. Nepomohlo to -- stejná chyba. V glib.h jsem našel:
#ifndef G_DISABLE_DEPRECATED ... #include <glib/deprecated/gcompletion.h> ... #endif /* G_DISABLE_DEPRECATED */
32bitový Arch Linux (i686). Budu vděčný za každou radu.
Řešení dotazu:
Potvrzuji yaourt -S mdk na x86_64 stejná chyba unknown type name ‘GCompletion’
Mne GNU MDK ide skompilovať, ale je to pravdepodobne tým, že používam staršiu verziu glib2 (2.32.4 v Slackware64 14.0), kde ešte nie je #include pre gcompletion.h uzavretý v #ifndef/#endif.
Nie úplne čistým ale rýchlym riešením by mohlo byť odstránenie definície G_DISABLE_DEPRECATED (a možno aj iných *_DISABLE_DEPRECATED definícií) z ./configure skriptu a potom jeho spustenie, aby vygeneroval Makefile súbory bez nej.
$ grep -n G_DISABLE_DEPRECATED configure 10575:AM_CFLAGS="$AM_CFLAGS $GLIB_CFLAGS -DG_DISABLE_DEPRECATED" $ sed -i 's/ -DG_DISABLE_DEPRECATED//' configure $ ./configure
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.