Nouvelle méthode de compilation de la bibliothèque glib sous Windows

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.

Je suppose que tu aimes

Origine blog.csdn.net/langeldep/article/details/115034571
conseillé
Classement