Windows下GCC链接器找不到-lcheck与-lsubunit的解决方法咨询
问题描述
在Windows 11系统下编译依赖check.h的C代码,执行编译命令:
gcc new_test.c s21_decimal.a -lcheck -lm -lpthread -lsubunit -o new_test
出现链接阶段错误:
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lcheck: No such file or directory /usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lsubunit: No such file or directory collect2: error: ld returned 1 exit status
当前GCC版本为gcc (GCC) 11.3.0,头文件check.h可正常识别,但链接器找不到check和subunit库文件。
解决方法
最简便的方案:通过MSYS包管理器安装
从报错路径能看出你使用的是MSYS环境,直接用包管理器安装缺失的库是最高效的:
- 打开MSYS终端,执行以下命令安装
check库(会自动安装依赖的subunit库):
pacman -S check
安装完成后重新执行原编译命令即可。
手动配置方案(包管理器安装失败时使用)
可以手动获取MSYS兼容的库文件(注意:不是Windows原生的.lib,而是MSYS环境使用的.a静态库或.dll动态库),步骤如下:
- 获取库文件
- 从MSYS2软件源下载
check-devel和subunit-devel对应的包,解压后提取出libcheck.a、libsubunit.a等库文件。
- 从MSYS2软件源下载
- 放置库文件
- 方式一:将库文件复制到MSYS系统库目录,比如
/usr/lib/(与报错路径中的库目录对应); - 方式二:将库文件放在项目自定义目录,比如项目根目录下的
libs文件夹。
- 方式一:将库文件复制到MSYS系统库目录,比如
- 调整编译命令
- 若用方式一,直接重新执行原编译命令即可;
- 若用方式二,需通过
-L参数指定自定义库路径,示例命令:gcc new_test.c s21_decimal.a -L./libs -lcheck -lm -lpthread -lsubunit -o new_test
内容的提问来源于stack exchange,提问作者USSURATONCAHI
相关产品推荐
相关产品推荐

