c - 用于 Windows 10 的 MSYS2 中的 Link -static GTK+-2.0 程序(使用 mingw64,而不是 mingw32)
问题描述
我有一个程序可以在 Linux 中完美编译,如果我不尝试将其与-static
标志链接,则可以在 Windows 中编译。(我不得不说我没有-static
在 linux 中尝试过,因为我觉得它没有用)。
此外,虽然它在 windows 中非静态链接而没有错误,但后来.dll
在我运行程序时找不到 s。
使用:MSYS2
(x64)和mingw64
(Windows 10
x64)(一切都是64位)。
当我尝试静态链接它时,它在最后阶段给出以下错误:
MINGW64 ~/mine-sweeper
$ make OS=win
CC about_mod.o
CC ctrl_mod.o
CC game_mod.o
CC menu_mod.o
CC player_mod.o
CC save_mod.o
CC xyzzy_mod.o
LD modules.o
CC main.o
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lgtk-win32-2.0
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lgdk-win32-2.0
collect2.exe: error: ld returned 1 exit status
make[1]: *** [Makefile:30: mine-sweeper.exe] Error 1
make: *** [Makefile:205: binary] Error 2
主要生成文件:
################################################################################
# libs
LIBS_STATIC = -static
LIBS_MATH = -l m
LIBS_CURSES = -l ncurses
LIBS_GTK = `pkg-config --libs gtk+-2.0`
ifeq ($(OS), linux)
LIBS = $(LIBS_MATH) $(LIBS_CURSES) $(LIBS_GTK)
else ifeq ($(OS), win)
LIBS = $(LIBS_STATIC) $(LIBS_MATH) $(LIBS_CURSES) $(LIBS_GTK)
endif
export LIBS
失败的生成文件:
MAIN_OBJ_MODULES = modules.o
MAIN_OBJS = $(TMP_DIR)/main.o \
$(patsubst %,$(MODULES_TMP_DIR)/%,$(MAIN_OBJ_MODULES))
$(BIN_NAME): $(MAIN_OBJS)
$(Q)$(CC) $^ -o $@ $(LIBS)
@echo " CC $@"
@echo ""
为什么它要寻找一个叫做 32 的东西?
什么不见了?
编辑:
的输出pkg-config --libs gtk+-2.0
是:
MINGW64 ~/mine-sweeper
$ pkg-config --libs gtk+-2.0
-LC:/msys64/mingw64/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
编辑:
GTK+-2.0的安装包为:
mingw64/mingw-w64-x86_64-gtk2 2.24.32-2 [installed]
GTK+ is a multi-platform toolkit (v2) (mingw-w64)
编辑:
请求的库似乎存在:
MINGW64 ~
$ find / |grep gtk-win32-2.0
/home/i5-5675C/mine-sweeper/bin/libgtk-win32-2.0-0.dll
/mingw64/bin/libgtk-win32-2.0-0.dll
/mingw64/lib/libgtk-win32-2.0.dll.a
find: failed to read file names from file system at or below ‘/’: No such file or directory
MINGW64 ~
$ find / |grep gdk-win32-2.0
/home/i5-5675C/mine-sweeper/bin/libgdk-win32-2.0-0.dll
/mingw64/bin/libgdk-win32-2.0-0.dll
/mingw64/lib/libgdk-win32-2.0.dll.a
/mingw64/lib/pkgconfig/gdk-win32-2.0.pc
find: failed to read file names from file system at or below ‘/’: No such file or directory
MINGW64 ~
$
解决方案
推荐阅读
- user-interface - 在球拍中按下时更改按钮的图像
- c - 使用 C 中的数组计算直角三角形的斜边
- sed - sed 找到带有集合文章的行 (a, an, the)
- c - void* 数组 C 的冒泡排序
- python - 直接将URL文本文件下载到csv文件python
- c++ - c++中类定义前面的宏
- javascript - 如何在视图中将 js 中的 var 与 Rails 上的 ruby 代码混合
- reactjs - React JS如何更新数组中的值
- c# - 并行运行多个测试时出现 DI / Unity OutOfMemoryException
- python - 熊猫图 - 两个轴标签重叠