Windows下编译openocd
本文详细介绍了如何在windows 64位系统下编译开源单片机下载和调试工具openocd
·
本文详细介绍了如何在windows 64位操作系统下编译开源单片机下载和调试工具openocd
按照 openocd 官方的推荐,在 windows 下可以采用以下两种方式编译:
- WSL:Windows Subsystem for Linux,编译出来的是 Linux 可执行文件格式(ELF),只能在 WSL 环江下运行或者 Linux 环境下运行,无法直接在 Windows 原生环境中运行。这意味着可能对硬件设备支持不太好
- MSYS2:MSYS2 使用 MinGW-w64 工具链,它模拟了 windows 环境下的开发环境,依赖的是 windows 的动态链接库。编译后可以直接在 windows 系统上运行。本文按照此方法编译
1. 安装 MSYS2
- MSYS2 官网: https://www.msys2.org
- 下载 https://github.com/msys2/msys2-installer/releases/download/2025-02-21/msys2-x86_64-20250221.exe msy2安装器
- 双击安装器程序进行安装,一路采用默认配置安装,安装默认路径 c:\msys64
关于 MSYS2 中 UCRT64、MSYS、MINGW64 和 CLANG64 终端有以下区别:
- 环境基础与运行时库
- UCRT64:基于 Windows Universal CRT 的 64 位环境,使用 Windows 10 及以上系统的标准 C 运行时库 ucrt,与 Windows 应用程序二进制兼容性好,能让编译程序在 Windows 上无缝运行,在性能和兼容性方面有优势,且支持更多功能。
- MSYS:是一个小型的 GNU 环境,提供类 Unix 的命令行接口,包含基本的 Bash、Make 等工具,基于 Cygwin,适用于需要一定 Unix ABI 兼容性的应用,其使用的库与 Cygwin 类似。
- MINGW64:适用于 64 位 Windows 的 MinGW - w64 环境,使用传统的 MinGW - w64 工具链,其运行时库是 GNU 运行时库,它允许在 Windows 上编译和运行类 Unix 风格的程序,但在与某些 Windows 特定功能的集成上可能不如 UCRT64。
- CLANG64:是 LLVM 项目的一部分,为 Windows 平台提供 64 位支持的 Clang 编译器环境,使用 LLVM 的运行时库,可作为 MinGW - w64 的替代品,支持一些现代编程特性和更高效的编译优化。
- 默认编译器与工具链
- UCRT64:默认使用 GCC 编译器,工具链基于 ucrt 库,能很好地与 Windows 系统集成,在编译针对 Windows 10 及以上系统的程序时具有优势。
- MSYS:默认使用 GCC 编译器,工具链基于 Cygwin 的库和工具,提供了类似 Unix 的编译环境,适合编译一些需要 Unix 环境的开源项目,但在生成原生 Windows 二进制文件时可能需要额外配置。
- MINGW64:默认使用 GCC 编译器,工具链是 MinGW - w64 的传统工具链,专注于生成原生的 64 位 Windows 二进制文件,对于一些依赖 GNU 工具链且不需要 UCRT 特定功能的项目很有用。
- CLANG64:使用 Clang 作为默认编译器,属于 LLVM 工具链,采用 lld 作为链接器,与 GCC 相比,Clang 在编译速度和诊断信息方面有优势,并且支持一些 GCC 不支持的现代 C++ 特性。
- 适用场景
- UCRT64:适用于开发需要在 Windows 10 及以上系统运行的应用程序,尤其是对 Windows 系统特性有较高要求,或需要与其他 Windows 应用程序进行交互的项目。由于其使用了现代的 UCRT 库,在处理新的 Windows 功能和 API 时更加方便4。
- MSYS:适用于那些需要在 Windows 上模拟 Unix 环境来进行开发的场景,例如编译一些原本为 Unix 或 Linux 系统编写的开源工具或脚本,或者进行一些需要 Unix 命令行工具和脚本语言的开发工作。
- MINGW64:适合开发原生的 64 位 Windows 应用程序,特别是对于那些依赖 GNU 工具链和传统 C/C++ 库的项目。如果项目需要与旧版本的 Windows 系统兼容,或者对 GCC 的特性和工具链比较熟悉,MINGW64 是一个不错的选择。
- CLANG64:适用于追求现代编译特性、高效编译优化以及对代码质量和诊断信息有较高要求的 C/C++ 开发项目。对于一些新兴的开源项目或者注重代码规范和性能的商业项目,CLANG64 可能会提供更好的开发体验。同时,由于 Clang 对 Objective - C 等语言的支持,也适用于涉及这些语言的混合编程项目。
2. 安装编译依赖工具
-
打开 MSYS2 的 MINGW64 终端
![[image-16.png]] -
更新 MSYS2 系统和包
pacman -Syu
如执行上述命令后出现终端自动关闭,重新打开 MSYS2-MINGW64 终端,执行以下命令
pacman -Su
- 安装必要的依赖工具
pacman -S base-devel mingw-w64-x86_64-toolchain git autogen autoconf automake libtool pkg-config
- 编译安装 jimtcl 软件包。
由于MinGW可能不直接提供jimtcl,你需要从源代码编译它。依次执行下面的命令进行安装。
git clone https://github.com/msteveb/jimtcl
cd jimtcl
./configure
make
make install
echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc
source ~/.bashrc
注意:以上最后 2 条指令是将 jimtcl 默认安装路径添加到 PKG_CONFIG_PATH 路径。
- 如果需要特定的接口支持,比如 JTAG,USB 等,还需要安装对应的库。以 USB 支持为例,执行:
pacman -S mingw-w64-x86_64-libusb mingw-w64-x86_64-hidapi
3. 配置和编译
以下指令在 MSYS2-MINGW64 终端执行
- 下载 openocd 源码
git clone https://git.code.sf.net/p/openocd/code openocd-code
cd openocd-code
- 运行配置脚本
./bootstrap
- 配置编译选项。在源码目录下运行./configure 脚本来配置编译选项。你可以根据自身需求添加不同的选项,下面是一个基本的配置示例:
./configure --prefix=/usr/local --enable-jlink --enable-stlink --enable-cmsis-dap
这里的选项含义如下:
--prefix=/usr/local:指定 OpenOCD 的安装路径。--enable-jlink:启用 J-Link 调试器支持。--enable-stlink:启用 ST-Link 调试器支持。--enable-cmsis-dap:启用 CMSIS-DAP 调试器支持。
你可依据实际使用的调试器添加或删除相应选项。每一个不同的调试器支持都需要不同的驱动库。比如 enable-cmsis-dap 需要安装 mingw-w64-x86_64-hidapi 库
- 编译源码。配置完成后,运行 make 命令来编译 OpenOCD 源码:
make
- 编译成功后,运行以下命令把编译好的 OpenOCD 安装到之前指定的路径:make install
- 验证安装。安装完成后,可通过以下命令验证 OpenOCD 是否安装成功
openocd --version
4. 异常
4.1配置时提示缺少 jimtcl
如果报以下错误
checking whether to enable verbose USB communication messages... no
checking whether to enable malloc free space logging... no
checking for jimtcl >= 0.79... no
checking for jim.h... no
configure: error: jimtcl is required but not found via pkg-config and system includes
说明缺少 jimtcl 库,源里面没有 jimtcl 包,需要下载源码编译安装。见 2-4
$ make install
mkdir -p /usr/local/bin
cp jimsh.exe /usr/local/bin
cp ./jimdb /usr/local/bin
mkdir -p /usr/local/docs/jim
Warning: asciidoc not available - installing Tcl_shipped.html
cp ./Tcl_shipped.html /usr/local/docs/jim/Tcl.html
mkdir -p /usr/local/lib/jim
cp libjim.a /usr/local/lib
cp ./README.extensions /usr/local/lib/jim
for i in tcltest.tcl ; do cp ./$i /usr/local/lib/jim; done
mkdir -p /usr/local/include
cp ./jim.h ./jim-eventloop.h ./jim-signal.h \
./jim-subcmd.h ./jim-win32compat.h /usr/local/include
cp jim-config.h /usr/local/include
mkdir -p /usr/local/bin
mkdir -p /usr/local/lib/pkgconfig
cp jimtcl.pc /usr/local/lib/pkgconfig
如果还报错,注意添加 pkg path 目录
echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >>
~/.bashrc source ~/.bashrc
更多推荐



所有评论(0)