¿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.