You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用给定Makefile运行单元测试时遇ld: cannot find -lt错误求助

问题描述

我正在为一个课程项目使用给定的Makefile运行单元测试,但遇到了无法解决的错误。以下是Makefile中相关部分:

CC=gcc
SDL=/usr/include/SDL2

CFLAGS_D=-g -Wall -Wextra -pedantic -O0 -D_REENTRANT -D_DEBUG -DSTRICT_THREADING -I$(SDL)
CFLAGS=-Wall -Wextra -O2 -D_REENTRANT -I$(SDL)
LD=gcc
LDFLAGS=-lm -lrt -L$(SDL) -lSDL2 -lSDL2_ttf -lSDL2_gfx -ldl -lpthread
LDFLAGS_D= $(LDFLAGS) #-lmcheck
LDFLAGS_T=-lm -lrt -L. -lt
OBJECTS= \
    point.o graphe.o \
    parse_util.o graphe_parse.o \
    liste_noeud.o dijkstra.o \
    viewport.o \
    graphrep.o window.o app.o
OBJECTS_D= $(subst .o,.do,$(OBJECTS))

VALGRIND=valgrind --leak-check=full -s

runtest_liste_noeud: test_liste_noeud
    @echo "================= [Test de liste_noeud] ================="
    ./test_liste_noeud


test_liste_noeud.o: test_liste_noeud.c
    $(CC) $(CFLAGS_D) -c $< -o $@


test_liste_noeud: test_liste_noeud.o graphe.do point.do liste_noeud.do
    $(LD) $^ -o $@ $(LDFLAGS_T)

%.o: %.c %.h
    $(CC) $(CFLAGS) -c $< -o $@

%.do: %.c %.h
    $(CC) $(CFLAGS_D) -c $< -o $@

执行make test_liste_noeud时出现错误:

gcc test_liste_noeud.o graphe.do point.do liste_noeud.do -o test_liste_noeud -lm -lrt -L. -lt
/usr/bin/ld: cannot find -lt: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [Makefile:97: test_liste_noeud] Error 1

我尝试在/usr/bin/ld中查找-lt但未找到,也在学校电脑上试过,依然报错。

修复方法

错误核心是链接器找不到-lt对应的库文件:-l参数后的t是库名,链接器会自动寻找libt.a(静态库)或libt.so(动态库)文件,解决思路如下:

  • 检查当前目录的测试库:LDFLAGS_T指定了-L.(优先搜索当前目录),先确认当前目录下是否存在libt.a或libt.so,如果没有说明测试依赖的库未编译生成。
  • 补充库的编译规则:如果Makefile里没有生成libt.a/libt.so的规则,需要添加对应步骤。比如测试库源码是t.c,可以补充:
    libt.a: t.o
        ar rcs $@ $^
    
  • 修正库名笔误:如果-lt是写错的,比如实际应该用单元测试库libtap.a(对应-ltap),直接修改LDFLAGS_T中的库参数即可。
  • 确认项目配套文件:如果是课程提供的Makefile,可能遗漏了配套的测试库文件,联系同学或助教确认是否需要额外下载或编译对应库。

内容的提问来源于stack exchange,提问作者Nell Truong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:30:11