Nuevo método para compilar la biblioteca glib en Windows

¿Por qué se dice que este artículo es un método nuevo? Porque hubo un artículo anterior que se compiló modificando el archivo meson.build, pero la última vez que compilé el archivo dll, cuando lo usé, informó que no se podía ubicar la entrada de la función. En los últimos dos días, leí cuidadosamente la introducción en el sitio web oficial, diciendo que msys2 se puede usar para compilar bajo Windows. Simplemente siga las instrucciones en el sitio web oficial y vea si habrá algún problema con el dll compilado esta vez.

El sitio web oficial de MYSY2 es https://www.msys2.org/

La página de inicio tiene Descargar el instalador: msys2-x86_64-20210228.exe dirección de descarga:   https://repo.msys2.org/distrib/x86_64/msys2-x86_64-20210228.exe

Después de la descarga, la instalación se realizó sin problemas. De forma predeterminada, se instaló en el directorio C: \ msys64. Después de iniciar la aplicación, ingresa a la interfaz de la consola y la siguiente operación es la misma que la de la consola shell de Linux.

Después de instalar MSYS2, debe instalar mingw, consulte   la introducción en https://www.gtk.org/docs/installations/windows/

MSYS2 vendrá con una herramienta pacman, similar a yum en centOS y apt-get en Ubuntu.

Instale las siguientes herramientas básicas:

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

Una vez completada la instalación, descomprima glib en el directorio "/ home / username / glib" en el directorio de instalación y ejecute el comando meson build

Si encuentra los siguientes errores, modifique el archivo meson.build y cambie todo if host_system == 'windows' a if host_system == 'windows' o host_system == 'cygwin' oa if ['cygwin', 'windows' ] .contiene (sistema_host)

subproyectos / libffi / src / meson.build: 71: 2: ERROR: Problema encontrado: par no compatible: sistema "cygwin", familia de cpu "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

 

Compile con ninja -C build y se produjo un error al compilar la biblioteca 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                    此行注释掉

Luego, vuelva a compilarlo.

ninja -C build install ejecuta la instalación

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

Mi método fue compilado y aprobado, pero no sucedió cuando otras implementaciones relacionadas con Windows no pudieron encontrar el problema cuando lo usé.

El siguiente método también está disponible en el sitio web oficial. Sin embargo, debido a problemas con el proxy, las herramientas en las que confías no se pueden descargar correctamente. Espera a que haya un entorno de red diferente y vuelve a intentarlo.

  • gvsbuild

    Este método proporciona scripts para crear la pila GTK a partir de bibliotecas y herramientas de origen y salida que pueden consumir proyectos basados ​​en Visual Studio o Meson.

Suponemos que está utilizando Windows 7 o posterior. Para versiones anteriores de Windows, deberá realizar una compilación personalizada de versiones anteriores de GLib y GTK.

Supongo que te gusta

Origin blog.csdn.net/langeldep/article/details/115034571
Recomendado
Clasificación