【问题标题】:Compile GTK+-2.0 program in MinGW (with MSYS) for Windows 10在 MinGW (with MSYS) for Windows 10 中编译 GTK+-2.0 程序
【发布时间】:2018-09-23 22:26:07
【问题描述】:

我有一个可以在 Linux 中完美编译的程序,直到我将 GTK 添加到它(它使用 ncurses)之前,它还在 Windows 中使用 MinGW(使用 MSYS)完美编译。

我从https://sourceforge.net/projects/gtk-mingw/files/gtk%2B2/下载了gtk+-2.24.11-1-bundle.7z

我将它提取到 C:\MinGW 替换所有要求替换的内容。

这是主 Makefile 的一部分:

################################################################################
# executables

ifeq ($(OS), linux)
  BIN_NAME  = mine-sweeper
else ifeq ($(OS), win)
  BIN_NAME  = mine-sweeper.exe
endif

export  BIN_NAME

################################################################################
# Make variables (CC, etc...)
ifeq ($(OS), linux)
  CC        = gcc
  LD        = ld
else ifeq ($(OS), win)
  CC        = gcc.exe
  LD        = ld.exe
endif

export  CC
export  LD

################################################################################
CFLAGS      = -std=c11
CFLAGS         += `pkg-config --cflags gtk+-2.0`

GTK_LIBS    = `pkg-config --libs gtk+-2.0`
ifeq ($(OS), linux)
  CFLAGS       += -D OS_LINUX

  LIBS      = -l m -l ncursesw $(GTK_LIBS)
else ifeq ($(OS), win)
  CFLAGS       += -D OS_WIN
  # curses
  CFLAGS       += -D _XOPEN_SOURCE=500 -I /mingw/include/ncursesw -I /mingw/include

  CURSES_LIBS   = -L /mingw/lib -l ncursesw -l psapi
  LIBS      = -static -l m $(CURSES_LIBS) $(GTK_LIBS)
endif

export  CFLAGS
export  LIBS

以及失败的 Makefile:

MAIN_OBJ_LIBALX = alx_lib.o
MAIN_OBJ_ABOUT  = about_mod.o
MAIN_OBJ_CTRL   = ctrl_mod.o
MAIN_OBJ_GAME   = game_mod.o
MAIN_OBJ_MENU   = menu_mod.o
MAIN_OBJ_PLAY   = player_mod.o
MAIN_OBJ_SAVE   = save_mod.o
MAIN_OBJ_XYZZY  = xyzzy_mod.o
MAIN_OBJS   = $(OBJ_DIR)/main.o \
            $(patsubst %,$(LIBALX_OBJ_DIR)/%,$(MAIN_OBJ_LIBALX)) \
            $(patsubst %,$(ABOUT_OBJ_DIR)/%,$(MAIN_OBJ_ABOUT)) \
            $(patsubst %,$(CTRL_OBJ_DIR)/%,$(MAIN_OBJ_CTRL)) \
            $(patsubst %,$(GAME_OBJ_DIR)/%,$(MAIN_OBJ_GAME)) \
            $(patsubst %,$(MENU_OBJ_DIR)/%,$(MAIN_OBJ_MENU)) \
            $(patsubst %,$(PLAY_OBJ_DIR)/%,$(MAIN_OBJ_PLAY)) \
            $(patsubst %,$(SAVE_OBJ_DIR)/%,$(MAIN_OBJ_SAVE)) \
            $(patsubst %,$(XYZZY_OBJ_DIR)/%,$(MAIN_OBJ_XYZZY))

$(BIN_NAME): $(MAIN_OBJS)
    $(Q)$(CC) $^ -o $@ $(LIBS)

好像编译.c文件没有问题,但是在make的最后阶段有问题:

~/mine-sweeper$ make OS=win
\tCC    alx_cmp.o
\tCC    alx_file.o
\tCC    alx_input.o
\tCC    alx_mask.o
\tCC    alx_math.o
\tCC    alx_ncur.o
\tCC    alx_seed.o
\tLD    alx_lib.o

\tCC    about.o
\tLD    about_mod.o

\tCC    start.o
\tLD    ctrl_mod.o

\tCC    game.o
\tCC    game_iface.o
\tLD    game_mod.o

\tCC    parser.o
\tCC    menu_iface.o
\tCC    menu_clui.o
\tCC    menu_tui.o
\tCC    menu_gui.o
\tLD    menu_mod.o

\tCC    player_iface.o
\tCC    player_clui.o
\tCC    player_tui.o
\tCC    player_gui.o
\tLD    player_mod.o

\tCC    save.o
\tCC    score.o
\tLD    save_mod.o

\tCC    xyzzy.o
\tLD    xyzzy_mod.o

\tCC    main.o

c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lgtk-win32-2.0
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lgdk-win32-2.0
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -latk-1.0
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lgio-2.0
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lgdk_pixbuf-2.0
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lfreetype
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lfontconfig
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lgobject-2.0
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lglib-2.0
collect2.exe: error: ld returned 1 exit status
make[1]: *** [mine-sweeper.exe] Error 1
make: *** [binary] Error 2

我错过了什么?

编辑: 我还从同一个 sourceforge 链接下载了gtk+-2.24.11-binwin32-1.7z,并将其解压缩到 MinGW 的根目录中,然后再次尝试,结果相同。

将bundle解压到MinGW的根目录是正确的,还是应该放到MinGW的某个子目录中?


已解决: 安装了MSYS2,里面有一个gtk2的包,一切都编译好了,也可以安装x86或x64。

【问题讨论】:

  • 您也可以从 gnome.org 下载捆绑包。请参阅构建说明,例如GtkWrite

标签: c windows gcc mingw32 gtk2


【解决方案1】:

您正在尝试链接到 32 位捆绑包,但没有下载 win32 捆绑包。您要么想使用 64 位 mingw 构建,要么获取 gtk 堆栈的 mingw32 包。

【讨论】:

  • 我下载了什么?我应该下载什么?如果可能,请提供链接。这是我第一次必须手动安装一个库并且没有太多想法。
  • 哇,那个特定的捆绑包,尽管是 gtk2 的链接,但最终解析为 gtk3 库。尝试该站点上的 binwin32 链接之一,但如果我没有必要,我不愿意靠近 sourceforge。
  • 如果gtk站点有下载win32的gtk2 lib的链接就更好了,但是我没找到,所以sourceforge似乎是唯一的选择
  • 您说的是一个非常过时的不受支持的平台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多