Pourquoi cet article est-il considéré comme une nouvelle méthode? Parce qu'il y avait un article précédent qui avait été compilé en modifiant le fichier meson.build, mais la dernière fois que j'ai compilé le fichier dll, lorsque je l'ai utilisé, il a signalé que l'entrée de la fonction ne pouvait pas être localisée. Au cours des deux derniers jours, j'ai lu attentivement l'introduction sur le site officiel, disant que msys2 peut être utilisé pour compiler sous Windows. Suivez simplement les instructions sur le site officiel et voyez s'il y aura des problèmes avec la dll compilée cette fois.
Le site officiel de MYSY2 est https://www.msys2.org/
La page d'accueil a Télécharger le programme d'installation: msys2-x86_64-20210228.exe adresse de téléchargement: https://repo.msys2.org/distrib/x86_64/msys2-x86_64-20210228.exe
Après le téléchargement, l'installation s'est déroulée sans problème. Par défaut, elle a été installée dans le répertoire C: \ msys64. Après le démarrage de l'application, vous entrez dans l'interface de la console et l'opération suivante est la même que celle de la console shell Linux.
Après avoir installé MSYS2, vous devez installer mingw, veuillez vous référer à l'introduction sur https://www.gtk.org/docs/installations/windows/
MSYS2 sera livré avec un outil pacman, similaire à yum dans centOS et apt-get dans Ubuntu.
Installez les outils de base suivants:
pacman --needed --noconfirm -S meson git diffutils automake autoconf make gcc libtool unzip
pacman --needed --noconfirm -S intltool pcre-devel base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-pcre
pacman --needed --noconfirm -S mingw-w64-x86_64-gtk3
pacman --needed --noconfirm -S mingw-w64-x86_64-glade
pacman --needed --noconfirm -S mingw-w64-x86_64-python3-gobject
Une fois l'installation terminée, décompressez glib dans le répertoire "/ home / username / glib" du répertoire d'installation et exécutez la commande meson build
Si vous rencontrez les erreurs suivantes, veuillez modifier le fichier meson.build et changer tout if host_system == 'windows' en if host_system == 'windows' ou host_system == 'cygwin' ou en if ['cygwin', 'windows' ] .contains (système_hôte)
subprojects / libffi / src / meson.build: 71: 2: ERREUR: Problème rencontré: Paire non prise en charge: système "cygwin", famille de processeurs "x86_64"
if host_cpu_family.startswith('x86') 此行改为 if true
arch_subdir = 'x86'
if host_system == 'windows' 此行改为 if ['cygwin', 'windows'].contains(host_system)
if size_t == 4
TARGET = 'X86_WIN32'
if is_msvc_like
c_sources = ['ffiold-msvc.c']
asm_sources = ['win32_msvc.S']
else
c_sources = ['ffi.c']
asm_sources = ['sysv.S']
endif
else
TARGET = 'X86_WIN64'
c_sources = ['ffiw64.c']
if is_msvc_like
asm_sources = ['win64_intel.S']
else
asm_sources = ['win64.S']
endif
endif
elif ['darwin', 'ios', 'linux', 'android'].contains(host_system)
if size_t == 4
if ['darwin', 'ios'].contains(host_system)
TARGET = 'X86_DARWIN'
else
TARGET = 'X86'
# FIXME: TARGET_X32 support
endif
c_sources = ['ffi.c']
asm_sources = ['sysv.S']
else
TARGET = 'X86_64'
c_sources = ['ffi64.c', 'ffiw64.c']
asm_sources = ['unix64.S', 'win64.S']
endif
endif
elif host_cpu_family == 'aarch64'
arch_subdir = 'aarch64'
TARGET = 'AARCH64'
c_sources = ['ffi.c']
if is_msvc_like
asm_sources = ['win64_armasm.S']
else
asm_sources = ['sysv.S']
endif
elif host_cpu_family == 'arm'
arch_subdir = 'arm'
TARGET = 'ARM'
c_sources = ['ffi.c']
asm_sources = ['sysv.S']
endif
if TARGET == ''
error('Unsupported pair: system "@0@", cpu family "@1@"'.format(host_system, host_cpu_family))
endif
Compilez avec ninja -C build, et une erreur s'est produite lors de la compilation de la bibliothèque zlib.
[41/1055] Linking target subprojects/zlib-1.2.11/msys-z.dll
FAILED: subprojects/zlib-1.2.11/msys-z.dll
cc -o subprojects/zlib-1.2.11/msys-z.dll subprojects/zlib-1.2.11/msys-z.dll.p/adler32.c.o subprojects/zlib-1.2.11/msys-z.dll.p/crc32.c.o subprojects/zlib-1.2.11/msys-z.dll.p/deflate.c.o subprojects/zlib-1.2.11/msys-z.dll.p/infback.c.o subprojects/zlib-1.2.11/msys-z.dll.p/inffast.c.o subprojects/zlib-1.2.11/msys-z.dll.p/inflate.c.o subprojects/zlib-1.2.11/msys-z.dll.p/inftrees.c.o subprojects/zlib-1.2.11/msys-z.dll.p/trees.c.o subprojects/zlib-1.2.11/msys-z.dll.p/zutil.c.o subprojects/zlib-1.2.11/msys-z.dll.p/compress.c.o subprojects/zlib-1.2.11/msys-z.dll.p/uncompr.c.o subprojects/zlib-1.2.11/msys-z.dll.p/gzclose.c.o subprojects/zlib-1.2.11/msys-z.dll.p/gzlib.c.o subprojects/zlib-1.2.11/msys-z.dll.p/gzread.c.o subprojects/zlib-1.2.11/msys-z.dll.p/gzwrite.c.o -Wl,--as-needed -Wl,--allow-shlib-undefined -shared ../subprojects/zlib-1.2.11/win32/zlib.def -Wl,--start-group -Wl,--out-implib=subprojects/zlib-1.2.11/libz.dll.a -Wl,--version-script,/home/tengl/glib-2.64.2/subprojects/zlib-1.2.11/zlib.map -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -Wl,--end-group
/usr/lib/gcc/x86_64-pc-msys/10.2.0/../../../../x86_64-pc-msys/bin/ld: subprojects/zlib-1.2.11/msys-z.dll.p/gzlib.c.o: in function `gz_open':
/home/tengl/glib-2.64.2/build/../subprojects/zlib-1.2.11/gzlib.c:243: undefined reference to `_wopen'
collect2: error: ld returned 1 exit status
[58/1055] Compiling C object glib/msys-glib-2.0-0.dll.p/gkeyfile.c.o
ninja: build stopped: subcommand failed.
文件gzguts.h中
#if defined(_WIN32) || defined(__CYGWIN__)
//# define WIDECHAR 注释掉此定义
#endif
文件gzlib.c中
/* -- see zlib.h -- */
//#ifdef WIDECHAR 此行注释掉
gzFile ZEXPORT gzopen_w(path, mode)
const wchar_t *path;
const char *mode;
{
return gz_open(path, -2, mode);
}
//#endif 此行注释掉
Ensuite, recompilez-le passera.
ninja -C build install exécute l'installation
Installing subprojects/libffi/src/msys-ffi-7.dll to /usr/local/bin
Installing subprojects/libffi/src/libffi.dll.a to /usr/local/lib
Installing subprojects/zlib-1.2.11/msys-z.dll to /usr/local/bin
Installing subprojects/zlib-1.2.11/libz.dll.a to /usr/local/lib
Installing glib/msys-glib-2.0-0.dll to /usr/local/bin
Installing glib/libglib-2.0.dll.a to /usr/local/lib
Installing gobject/msys-gobject-2.0-0.dll to /usr/local/bin
Installing gobject/libgobject-2.0.dll.a to /usr/local/lib
Installing gthread/msys-gthread-2.0-0.dll to /usr/local/bin
Installing gthread/libgthread-2.0.dll.a to /usr/local/lib
Installing gmodule/msys-gmodule-2.0-0.dll to /usr/local/bin
Installing gmodule/libgmodule-2.0.dll.a to /usr/local/lib
Installing gio/msys-gio-2.0-0.dll to /usr/local/bin
Installing gio/libgio-2.0.dll.a to /usr/local/lib
Installing glib/gtester.exe to /usr/local/bin
Installing gobject/gobject-query.exe to /usr/local/bin
Installing gio/gio.exe to /usr/local/bin
Installing gio/gresource.exe to /usr/local/bin
Installing gio/gio-querymodules.exe to /usr/local/bin
Installing gio/glib-compile-schemas.exe to /usr/local/bin
Installing gio/glib-compile-resources.exe to /usr/local/bin
Installing gio/gsettings.exe to /usr/local/bin
Installing gio/gdbus.exe to /usr/local/bin
Installing gio/gapplication.exe to /usr/local/bin
Installing gobject/glib-enumtypes.h to /usr/local/include/glib-2.0/gobject
Installing gio/gioenumtypes.h to /usr/local/include/glib-2.0/gio
Ma méthode a été compilée et passée, mais cela ne s'est pas produit lorsque d'autres implémentations liées à Windows n'ont pas pu trouver le problème lorsque je l'ai utilisée.
La méthode suivante est également disponible sur le site Web officiel. Cependant, en raison de problèmes de proxy, les outils sur lesquels vous comptez ne peuvent pas être téléchargés avec succès. Attendez un autre environnement réseau et réessayez.
-
gvsbuild
Cette méthode fournit des scripts pour créer la pile GTK à partir des bibliothèques et outils de sortie source et qui peuvent être utilisés par les projets basés sur Visual Studio ou Meson.
Nous supposons que vous utilisez Windows 7 ou version ultérieure. Pour les anciennes versions de Windows, vous devrez créer une version personnalisée des anciennes versions de GLib et GTK.