Makefile 将问题与make to library链接到单独的文件夹中

Makefile 将问题与make to library链接到单独的文件夹中,makefile,gnu-make,Makefile,Gnu Make,所以我尝试在一个包含其他地方的对象文件和库的程序上运行make。然而,当我尝试链接这些对象文件和库时,我在链接时遇到了一系列错误,说函数有一个未定义的引用 $(OBJ)/monitor.o: monitor.c list.h $(PTDIR)/standards.h $(PTDIR)/os.h $(OBJ) $(CC) $(CCFLAGS) -c monitor.c -I. -o $@ $(OBJ)/reader-writer.o: reader-writer.h reader-wri

所以我尝试在一个包含其他地方的对象文件和库的程序上运行make。然而,当我尝试链接这些对象文件和库时,我在链接时遇到了一系列错误,说函数有一个未定义的引用

$(OBJ)/monitor.o: monitor.c list.h $(PTDIR)/standards.h $(PTDIR)/os.h $(OBJ)
    $(CC) $(CCFLAGS) -c monitor.c -I. -o $@

$(OBJ)/reader-writer.o: reader-writer.h reader-writer.c $(PTDIR)/os.h $(PTDIR)/standards.h $(OBJ)
    $(CC) $(CCFLAGS) -c reader-writer.c -I. -o $@

$(OBJ)/reader-writer-monitor.o: reader-writer-monitor.c $(PTDIR)/os.h $(PTDIR)/standards.h $(OBJ)
    $(CC) $(CCFLAGS) -c reader-writer-monitor.c -I. -o $@

$(OBJ)/libMonitor.a: $(OBJ)/monitor.o $(OBJ)/list_adders.o $(OBJ)/list_removers.o    $(OBJ)/list_movers.o
    ar -crvs $@ $^

$(OBJ)/reader-writer-test.o: reader-writer-test.c
    $(CC) $(CCFLAGS) -c $^ -I. -o $@

$(OBJ)/reader-writer-test: $(OBJ)/reader-writer-test.o (OBJ)/reader-writer.o $(OBJ)/libMonitor.a $(PTDIR)/os.h $(PTDIR)/standards.h
    $(CC) $(CCFLAGS) $^ -o reader-writer-test

 $(OBJ)/reader-writer-monitor:  $(OBJ)/reader-writer-monitor.o $(OBJ)/reader-writer.o     $(OBJ)/libMonitor.a  $(PTDIR)/os.h $(PTDIR)/standards.h
    $(CC) $(CCFLAGS) $(OBJ)/reader-writer-monitor.o $(OBJ)/reader-writer.o -L./$(OBJ)/Monitor  -o     reader-writer-monitor
它与读写器和读写器监视器都有关。我知道这是一个链接问题,但我似乎找不到它被指出的地方。我认为这与所有内容的.o声明有关,因为错误与其他一些未定义的pthread引用有关。有关于如何解决这个问题的帮助吗

user@tux2:~/Desktop/CMPT332/group18/Trunk/A2> make all
gcc -Wall -g -pedantic -c list_adders.c -I. -o objdir/Linux/list_addersB.o -m64
list_adders.c: In function 'ListCreate':
list.h:91:4: warning: return makes pointer from integer without a cast [enabled by default]
    return NULL;\
    ^
list_adders.c:85:4: note: in expansion of macro 'HeaderGet'
    HeaderGet(headerRet);
    ^
gcc -Wall -g -pedantic -c list_movers.c -I. -o objdir/Linux/list_moversB.o -m64
gcc -Wall -g -pedantic -c list_removers.c -I. -o objdir/Linux/list_removersB.o -m64
ar -rcs objdir/Linux/libListB.a objdir/Linux/list_addersB.o objdir/Linux/list_moversB.o objdir/Linux/list_removersB.o
gcc -Wall -g -pedantic -c list_adders.c -I. -o objdir/Linux/list_adders.o -m32
gcc -Wall -g -pedantic -c list_movers.c -I. -o objdir/Linux/list_movers.o -m32
gcc -Wall -g -pedantic -c list_removers.c -I. -o objdir/Linux/list_removers.o -m32
ar -rcs objdir/Linux/libListC.a objdir/Linux/list_adders.o objdir/Linux/list_movers.o objdir/Linux/list_removers.o
gcc -Wall -g -pedantic -c monitor.c -I. -o objdir/Linux/monitor.o
ar -rcs objdir/Linux/libMonitor.a objdir/Linux/monitor.o objdir/Linux/list_adders.o objdir/Linux/list_removers.o objdir/Linux/list_movers.o
gcc -Wall -g -pedantic -c reader-writer-monitor.c -I. -o objdir/Linux/reader-writer-monitor.o
gcc -Wall -g -pedantic -c reader-writer.c -I. -o objdir/Linux/reader-writer.o
gcc -Wall -g -pedantic objdir/Linux/reader-writer-monitor.o objdir/Linux/reader-writer.o -L./objdir/Linux/Monitor  -o reader-writer-monitor
/usr/lib/gcc/x86_64-mageia-linux-gnu/4.8.2/../../../../lib64/crt1.o: In function '_start':
/home/iurt/rpmbuild/BUILD/glibc-2.18/csu/../sysdeps/x86_64/start.S:118: undefined reference to 'main'
objdir/Linux/reader-writer-monitor.o: In function 'StartRead':
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:36: undefined reference to 'MonEnter'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:41: undefined reference to 'MonWait'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:54: undefined reference to 'MonSignal'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:56: undefined reference to 'MonLeave'
objdir/Linux/reader-writer-monitor.o: In function 'StopRead':
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:62: undefined reference to 'MonEnter'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:66: undefined reference to 'MonSignal'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:67: undefined reference to 'MonLeave'
objdir/Linux/reader-writer-monitor.o: In function 'StartWrite':
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:74: undefined reference to 'MonEnter'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:78: undefined reference to 'MonWait'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:80: undefined reference to 'MonLeave'
objdir/Linux/reader-writer-monitor.o: In function 'StopWrite':
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:85: undefined reference to 'MonEnter'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:89: undefined reference to 'MyPid'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:96: undefined reference to 'MonSignal'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer-monitor.c:98: undefined reference to 'MonLeave'
objdir/Linux/reader-writer.o: In function 'reader':
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:39: undefined reference to 'Sleep'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:42: undefined reference to 'Sleep'
objdir/Linux/reader-writer.o: In function 'writer':
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:59: undefined reference to 'Sleep'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:62: undefined reference to 'Sleep'
objdir/Linux/reader-writer.o: In function 'mainp':
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:73: undefined reference to 'MonInit'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:77: undefined reference to 'Create'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:79: undefined reference to 'Create'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:81: undefined reference to 'Create'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:83: undefined reference to 'Create'
/student/user/Desktop/CMPT332/group18/Trunk/A2/reader-writer.c:85: undefined reference to 'Create'
collect2: error: ld returned 1 exit status

包括错误和实际的make输出将会很有用。我一回到电脑就可以了!这些符号(
MonEnter
MonWait
MonSignal
等)是在哪里定义的?它们在Monitor.h中定义,并在Monitor库(即Monitor.o和list命令)中编码.
monitor.o
reader-writer-monitor.o
,因为只有
reader-writer-monitor.o
正在链接到
reader-writer-monitor
监视器。o不在该链接线上。也不是
libMonitor.a
(可能打算通过
-lMonitor
使用)。