gobject调试环境搭建

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目录里重新编译

********************** 还有问题,未完待续 *********************************

猜你喜欢

转载自blog.csdn.net/pfysw/article/details/114106867