Portál AbcLinuxu, 5. května 2025 12:16
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.