0

在浏览了 LWIP 文档之后,我编写了一个简单的 tcp echo server 代码。为了编译它并创建一个可执行文件,我编写了以下 Makefile。现在,当我运行命令时,它会为makefile 中包含的make all每个文件提供错误。 文件结构如下: 1. tcp_server.c 是我创建tcp 服务器的主文件。2. 它使用“lwip-1.4.1/src/core/lwip/tcp.c”和“lwip-1.4.1/src/core/lwip/tcp_out.c”中定义的tcp_new()、tcp_bind()等函数"并且我已经给出了相应的编译路径。.c

我只是编写 makefile 的初学者,并且通过 GNU Make 文档编写了以下文件。

CC=gcc

CFLAGS= -g -Wall

LWIPDIR=../lwip-1.4.1/src

TARGET=tcp_server

INCLUDES= -I../lwip-1.4.1/src/include -I../STABLE-1_4_0/ports/unix/proj/lib\
        -I../STABLE-1_4_0/ports/unix/include -I../lwip-1.4.1/src/include/ipv4

LFLAGS= -L../STABLE-1_4_0/ports/unix/proj/lib/liblwip.so

#LIBS= -llwip

COREFILES=$(LWIPDIR)/core/tcp.c $(LWIPDIR)/core/tcp_out.c

VPATH = $(LWIPDIR)/core

OBJS = tcp_server.o tcp.o tcp_out.o

MAIN=tcp_server

all : edit

edit : $(OBJS)
        $(CC) $(CFLAGS) $(INCLUDES) -o edit $(OBJS) $(LFLAGS)

tcp_server.o : tcp_server.c tcp.o tcp_out.o
        $(CC) $(CFLAGS) $(INCLUDES) -c tcp_server.c $(LFLAGS)

tcp.o : $(LWIPDIR)/core/tcp.c
        $(CC) $(CFLAGS) $(INCLUDES) -c $(LWIPDIR)/core/tcp.c $(LFLAGS)

tcp_out.o : $(LWIPDIR)/core/tcp_out.c
        $(CC) $(CFLAGS) $(INCLUDES) -c $(LWIPDIR)/core/tcp_out.c  $(LFLAGS)

clean :
        rm -f *.o

所有文件都包含在“lwip-1.4.1/src/include”中定义的某些头文件,并且我相应地给了 -I 参数。但是在运行make时,输出显示“未定义的引用”所有在 lwip 头文件中定义的函数。可能是什么原因?我哪里错了?

谢谢大家的帮助。

4

1 回答 1

2

UNDEFINED REFERENCE 是链接器错误,因此您应该这样做;

对于 gcc,您应该使用 -L 指定包含库的目录,并使用 -l 链接特定库。例如更改您的makefile中的行;

LFLAGS= -L../STABLE-1_4_0/ports/unix/proj/lib

删除 LIBS 之前的注释并更改此目标

edit : $(OBJS)
        $(CC) $(CFLAGS) $(INCLUDES) -o edit $(OBJS) $(LFLAGS) $(LIBS)
于 2016-01-11T15:14:27.667 回答