我需要编译几个文件。 这是命令。 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怎么办?
答案 0 :(得分:0)
我认为LDFLAGS
不正确。请尝试以下方法:
LDFLAGS += -L/usr/lib -lprotobuf-c
看起来您的目录-L
和库不按顺序。
另外,我删除了对-g
的额外通话。