gpt4 book ai didi

c - GNU 对共享库中定义的函数进行 undefined reference

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:52 25 4
gpt4 key购买 nike

我正在尝试链接到共享库。但是我一直收到 undefined reference 错误。以下是 makefile:

LIBDIR :=./lib
LIB :=-lminus
OBJDIR :=objdir
SOURCES=$(wildcard ./src/*.c)
OBJS :=$(patsubst ./src/%.c, $(OBJDIR)/%.o, $(SOURCES))

INCPATH = -Ilib -Isrc
vpath %.h ./src ./lib
vpath %.c ./src ./lib
optest : $(OBJS)
cc -o optest $(OBJS)

$(OBJDIR)/main.o : main.c add.h mul.h did.h minus.h
cc $(INCPATH) -o $@ -c $< -L$(LIBDIR) $(LIB)

$(OBJDIR)/%.o: %.c %.h | $(OBJDIR)
cc -o $@ -c $<

$(OBJDIR):
mkdir $@


clean :
rm -rf $(OBJDIR)
rm -f optest
rm -f ./src/*.o

共享库名为libminus,放在./lib目录下。 main.c 中的main 函数使用该库中定义的函数minus。网上查了一下,以前也有人遇到过这个问题。在规则命令中将共享库放在目标文件之后,他们的大部分问题都得到了解决。我也试过这个,但它对我不起作用。我得到的错误如下:

mkdir objdir
cc -o objdir/mul.o -c ./src/mul.c
cc -o objdir/did.o -c ./src/did.c
cc -Ilib -Isrc -o objdir/main.o -c ./src/main.c -L./lib -lminus
cc -o objdir/add.o -c ./src/add.c
cc -o optest objdir/mul.o objdir/did.o objdir/main.o objdir/add.o
objdir/main.o: In function `main':
main.c:(.text+0xa5): undefined reference to `minus'
collect2: error: ld returned 1 exit status
makefile:11: recipe for target 'optest' failed
make: *** [optest] Error 1

谁能给点建议?谢谢。

最佳答案

你把 lib 的东西放到了错误的规则中:

$(OBJDIR)/main.o : main.c add.h mul.h did.h minus.h 
cc $(INCPATH) -o $@ -c $< -L$(LIBDIR) $(LIB)

这只是将 main.c 编译成 main.o-L$(LIB) 不属于这里。它们必须在此规则的构建配方中,该配方链接可执行文件:

optest : $(OBJS)
cc -o optest $(OBJS)

关于c - GNU 对共享库中定义的函数进行 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38759969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com