1 初步使用
新建个工程,把下面这个demo里的3个文件拷贝到src目录
https://github.com/zorgnax/gobject-examples/tree/master/01-media-from-book
编写Makefile
# 请自行新建一个bld文件夹
OBJ_DIR = ../bld
# 获取所以源文件
SRC = cleanable.c media.c
# 把.c后缀替换为.o,并加上目录
OBJ = ${patsubst %.c, ${OBJ_DIR}/%.o, ${SRC}}
LIBS = -L/d/msys64/mingw64/bin -lgobject-2.0-0 -lglib-2.0-0
INC = -I/mingw64/include/glib-2.0 -I/mingw64/lib/glib-2.0/include
TARGET=${OBJ_DIR}/media
CC=cc
CCFLAGS=-g -Wall -mms-bitfields ${LIBS} ${INC}
all:${TARGET}
${TARGET}: ${OBJ}
${CC} $^ -o $@ ${LIBS} -lwinmm
@echo "Compile done."
${OBJ_DIR}/%.o:%.c
@echo "Compiling $< ==> $@"
${CC} ${CCFLAGS} -c $< -o $@
clean:
# -r删除目录,-f删除文件
rm -f ${OBJ_DIR}/*.o
rm -f ${TARGET}
编译后正常运行,由于我之前装过GTK,所以这步问题不是很大。
2 编译glib
去开源镜像站下载glib2-2.48.0-1.src.tar.gz,解压后执行 makepkg --skippgpcheck
Administrator@DESKTOP-2020PCY MINGW64 /d/source/glib2
# makepkg --skippgpcheck
==> 正在创建软件包:glib2 2.48.0-1 (2021年02月25日 21:30:01)
==> 正在检查运行时依赖关系...
==> 正在检查编译时依赖关系
==> 缺少依赖关系:
-> pkg-config
-> python
-> libxslt-devel
-> docbook-xsl
-> pcre-devel
-> libffi-devel
-> gamin-devel
-> gtk-doc
==> 错误: 无法解决所有的依赖关系。
提示缺少依赖,安装依赖
pacman -S pkg-config python libxslt-devel docbook-xsl pcre-devel libffi-devel gamin-devel gtk-doc
安装完后继续上一步编译,接下来等待编译成功,没碰到什么问题
3 单步调试
在源码目录的D:\source\glib2\src\glib-2.48.0\gobject.libs里编译出了libgobject-2.0.dll.a文件,修改Makefie,使用源码里的库
LIBS = -L/d/msys64/mingw64/bin \
-L/d/source/glib2/src/glib-2.48.0/gobject/.libs \
-lgobject-2.0 -lglib-2.0-0
可以编译通过,但是单步调试没法设断点,因为编译出来没有符号表
b g_object_new
Note: breakpoint 3 also set at pc 0x100401a38.
Breakpoint 5 at 0x100401a38
修改glib-2.48.0/gobject和glib-2.48.0这2个目录下的Makefile
#CFLAGS = -march=x86-64 -mtune=generic -O2 -pipe -fvisibility=hidden
CFLAGS = -march=x86-64 -mtune=generic -g3 -pipe -fvisibility=hidden
修改后重新编译,没有效果。
经过调试,发现是libtool的问题,把sqlite编译后的bld文件夹里的libtool替换src/glib-2.48.0文件夹里的libtool,libtool的这一行控制生成动态库,如果是no,则只生成静态库
# Whether or not to build shared libraries.
build_libtool_libs=yes
接下来再到glib-2.48.0/gobject目录里重新编译
********************** 还有问题,未完待续 *********************************