LWIP Makefile 错误
LWIP Makefile error
看完LWIP文档后,我写了一个简单的tcp echo server代码。为了编译它并创建一个可执行文件,我编写了以下 Makefile。现在,当我 运行 命令 make all
时,它会为 makefile 中包含的每个 .c
文件给出错误。
文件结构如下:
1. tcp_server.c 是我创建 tcp 服务器的主要文件。
2.它使用了tcp_new(), tcp_bind()等定义在"lwip-1.4.1/src/core/lwip/tcp.c"和"lwip-1.4.1/src/core/lwip/tcp_out.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" 中定义的某些 header,我相应地给了 -I 参数。但是在 运行ning make
上,输出显示 "Undefined reference to" lwip header 文件中定义的所有函数。可能是什么原因?我哪里出错了?
感谢大家的帮助。
UNDEFINED REFERENCE 是一个 linker 错误,所以你应该这样做;
对于 gcc,您应该使用 -L 来指定您的库所在的目录,并使用 -l 来 link 一个特定的库。例如,更改您的 makefile 中的行;
LFLAGS= -L../STABLE-1_4_0/ports/unix/proj/lib
删除 LIBS 之前的注释并更改此目标
edit : $(OBJS)
$(CC) $(CFLAGS) $(INCLUDES) -o edit $(OBJS) $(LFLAGS) $(LIBS)
看完LWIP文档后,我写了一个简单的tcp echo server代码。为了编译它并创建一个可执行文件,我编写了以下 Makefile。现在,当我 运行 命令 make all
时,它会为 makefile 中包含的每个 .c
文件给出错误。
文件结构如下:
1. tcp_server.c 是我创建 tcp 服务器的主要文件。
2.它使用了tcp_new(), tcp_bind()等定义在"lwip-1.4.1/src/core/lwip/tcp.c"和"lwip-1.4.1/src/core/lwip/tcp_out.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" 中定义的某些 header,我相应地给了 -I 参数。但是在 运行ning make
上,输出显示 "Undefined reference to" lwip header 文件中定义的所有函数。可能是什么原因?我哪里出错了?
感谢大家的帮助。
UNDEFINED REFERENCE 是一个 linker 错误,所以你应该这样做;
对于 gcc,您应该使用 -L 来指定您的库所在的目录,并使用 -l 来 link 一个特定的库。例如,更改您的 makefile 中的行;
LFLAGS= -L../STABLE-1_4_0/ports/unix/proj/lib
删除 LIBS 之前的注释并更改此目标
edit : $(OBJS)
$(CC) $(CFLAGS) $(INCLUDES) -o edit $(OBJS) $(LFLAGS) $(LIBS)