gdb编译
交叉编译gdb,使用docker+mingw编译环境。
编译这个是因为在windows上使用gdb调试程序。 使用windows上的mingw环境,这个环境默认使用的gdb版本是8.1,而且我没有找到更高的版本。这个版本有一个Bug。调试的程序使用/DYNAMICBASE编译项(实际是连接过程)的exe, 会因为内存地址错误导致断点无效。
因此,我选择当前能获得的gdb10.2版本代码, 自己编译.
连接错误分析
在最后的连接过程中, 遇到下面这个错误:
getrandom.c:(.text+0x2d): undefined reference to `BCryptGenRandom@16'
打开gnulib\import\getrandom.c文件查看源码
# define BCryptGenRandomFunc BCryptGenRandom
这步代码生效
向上查看,发现需要查看HAVE_LIB_BCRYPT这个宏的定义逻辑
打开gnulib\configure文件查看源码
根据上图实例 20682行,gl_cv_lib_assume_bcrypt变量值为no导致
根据20661行所示,原因在于#if !(_WIN32_WINNT >= _WIN32_WINNT_WIN7) 的条件不满足
故可以确定为_WIN32_WINNT宏的定义有问题导致
修改方案
configure时追加参数
CFLAGS="-D_WIN32_WINNT=0x0601"
或
CFLAGS="${CFLAGS} -D_WIN32_WINNT=0x0601"