0
我想鏈接到共享庫。但我不斷收到未定義的參考錯誤。以下是生成文件:GNU使未定義的參考共享庫中定義的功能
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 [email protected] -c $< -L$(LIBDIR) $(LIB)
$(OBJDIR)/%.o: %.c %.h | $(OBJDIR)
cc -o [email protected] -c $<
$(OBJDIR):
mkdir [email protected]
clean :
rm -rf $(OBJDIR)
rm -f optest
rm -f ./src/*.o
共享庫被稱爲libminus
,這是擺在./lib
目錄。 main.c
中的main
函數使用此庫中定義的函數minus
。我在網上搜索,之前有人遇到過這個問題。在共享庫放在rule命令中的目標文件之後,大多數問題都解決了。我也試過這個,但它對我沒有用。我得到的錯誤如下:
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
任何一個可以給出一些建議嗎?謝謝。
是的。你是對的。在將-L $(LIB)移到optest後,它現在可以工作。非常感謝。 – Jerry