首页 > 解决方案 > 在 Windows 上使用介子和 MSYS2 构建 GTK3 失败

问题描述

尝试按照这些说明在 Windows 上使用 MSYS2 从 git 源构建 GTK3 的稳定版本 3.24.21 。我已经成功地从 tar.xz 源和 MSYS2 早期构建了这个版本,configure/make所以我知道我拥有所有必需的依赖项。

克隆 gtk 存储库后,我检查了所需的版本。然后我meson按照说明中的说明运行。

git checkout -b issue1234 3.24.21
meson setup --prefix /opt/gtk3 _build

出于某种原因,meson无法找到PATH 中存在的一个pkg-config或。cmake它还认为,glib2尽管存在足够的版本,但它需要构建最新版本。当meson尝试构建glib2时,它会爆炸:

subprojects/glib/meson.build:1680:2: ERROR: Entry _WIN32_WINNT not in configuration data.

_WIN32_WINNT大概是在以下glib/meson.build块中设置的(它是文件中唯一设置它的位置):

# Windows SDK requirements and checks
if host_system == 'windows'
  # Check whether we're building for UWP apps
  code = '''
  #include <windows.h>
  #if !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP))
  #error "Not building for UWP"
  #endif'''
  if cc.compiles(code, name : 'building for UWP')
    glib_conf.set('G_WINAPI_ONLY_APP', true)
    # We require Windows 10+ on WinRT
    glib_conf.set('_WIN32_WINNT', '0x0A00')
  else
    # We require Windows 7+ on Win32
    **glib_conf.set('_WIN32_WINNT', '0x0601')**
  endif
endif

这个块的最后一行glib/meson.build是它爆炸的地方:

if has_syspoll and has_systypes
  poll_includes = '''
      #include<sys/poll.h>
      #include<sys/types.h>'''
elif has_winsock2
  poll_includes = '''
      #define _WIN32_WINNT @0@
      #include <winsock2.h>'''.format(glib_conf.get('_WIN32_WINNT'))

关于发生了什么的任何想法?为什么pkg-config/cmake找不到?为什么需要建glib2?为什么构建失败?

标签: windowsgtkmsys2meson-build

解决方案


推荐阅读