从macOS交叉编译GTK3应用到Windows遇编译错误求助
问题描述
我了解过从Linux交叉编译GTK3应用到Windows的方案,但不清楚如何从macOS实现该操作。尝试使用以下命令编译:
i686-w64-mingw32-g++ main.cpp -o main `pkg-config --cflags --libs gtk+-3.0`
出现如下编译错误:
In file included from /usr/local/Cellar/glib/2.72.3/include/glib-2.0/gio/gio.h:46,
from /usr/local/Cellar/gtk+3/3.24.34/include/gtk-3.0/gdk/gdkapplaunchcontext.h:28,
from /usr/local/Cellar/gtk+3/3.24.34/include/gtk-3.0/gdk/gdk.h:32,
from /usr/local/Cellar/gtk+3/3.24.34/include/gtk-3.0/gtk/gtk.h:30,
from main.cpp:9:
/usr/local/Cellar/glib/2.72.3/include/glib-2.0/gio/gcredentials.h:75:1: error: ‘uid_t’ does not name a type; did you mean ‘pid_t’?
75 | uid_t g_credentials_get_unix_user (GCredentials *credentials,
| ^~~~~
| pid_t
/usr/local/Cellar/glib/2.72.3/include/glib-2.0/gio/gcredentials.h:79:52: error: ‘uid_t’ has not been declared
79 | uid_t uid,
|
问题根源
你当前调用的pkg-config指向了macOS本地安装的GTK3库(路径为/usr/local/Cellar/下的系统库),而非针对Windows交叉编译的MinGW版本GTK库。uid_t是类Unix系统(Linux/macOS)特有的类型,Windows平台不存在该定义,因此编译报错。
解决步骤
1. 安装交叉编译专用的MinGW版GTK3库
通过Homebrew安装针对Windows的交叉编译GTK3包:
brew install mingw-w64-gtk3
如果上述包找不到,可尝试带交叉编译参数安装:
brew install mingw-w64 gtk+3 --cross-compile
2. 指定交叉编译的pkg-config配置
编译时必须让pkg-config找到MinGW版GTK3的配置文件,而非本地macOS库,有两种方式:
- 方式一:设置环境变量指定配置路径
先找到MinGW版GTK3的pkgconfig目录(通常在/usr/local/Cellar/mingw-w64-gtk3/<具体版本号>/lib/pkgconfig),然后设置环境变量并编译:export PKG_CONFIG_PATH=/usr/local/Cellar/mingw-w64-gtk3/3.24.34/lib/pkgconfig i686-w64-mingw32-g++ main.cpp -o main `pkg-config --cflags --libs gtk+-3.0` - 方式二:直接使用MinGW专属的pkg-config工具
如果安装了MinGW的pkg-config工具,可直接调用它来获取编译参数:i686-w64-mingw32-g++ main.cpp -o main `i686-w64-mingw32-pkg-config --cflags --libs gtk+-3.0`
3. 验证依赖路径是否正确
执行以下命令检查pkg-config输出的路径是否为MinGW相关路径:
# 查看编译参数路径 pkg-config --cflags gtk+-3.0 # 查看链接库路径 pkg-config --libs gtk+-3.0
如果输出仍包含/usr/local/Cellar/glib/这类macOS本地路径,说明环境变量未配置正确,需要重新调整PKG_CONFIG_PATH。
内容的提问来源于stack exchange,提问作者Sajjad Abbas

