如何使用gcc编译多个文件

时间:2013-02-06 19:21:00

标签: gcc

我需要编译几个文件。 这是命令。 sample_client.c依赖于lsp.o.现在我改变了lsp.c和lsp.h.如何编译以使此更改对lsp.o有效?

main函数在sample_client.c中,lsp.c没有main函数。

gcc -g -I/usr/include -g sample_client.c lsp.o lspmessage.pb-c.o -o sample_client -L/usr/lib -lprotobuf-c

这是我的makefile,

CC = gcc

TARGET = sample_client sample_server

CFLAGS += -g -I/usr/include
LDFLAGS += -g -lprotobuf-c -L/usr/lib

all:    $(TARGET)

$(TARGET):  lsp.o lspmessage.pb-c.o

%.o:    %.c
    $(CC) -c $(CFLAGS) $< -o $@

clean:
    rm -f *.o 
    rm -f $(TARGET)

但是,lprotobuf-c无法正确链接。

运行make -f Makefile 我可以得到以下内容,

lspmessage.pb-c.o: In function `lspmessage__get_packed_size':
...: undefined reference to `protobuf_c_message_get_packed_size'
lspmessage.pb-c.o: In function `lspmessage__pack':
...: undefined reference to `protobuf_c_message_pack'

我知道我可以运行此命令,

gcc -g -I / usr / include -g sample_client.c lsp.o lspmessage.pb-c.o -o sample_client -L / usr / lib -lprotobuf-c

但是如果我改变lsp.c和lsp.h怎么办?

1 个答案:

答案 0 :(得分:0)

我认为LDFLAGS不正确。请尝试以下方法:

LDFLAGS +=  -L/usr/lib -lprotobuf-c

看起来您的目录-L和库不按顺序。

另外,我删除了对-g的额外通话。