问题
I am not familiar with makefile, here is my 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)
when I run make -f Make, I get these errors.
**@**:./$ make -f Makefile
gcc -g -I/usr/include -g -lprotobuf-c -L/usr/lib sample_client.c lsp.o lspmessage.pb-c.o -o sample_client
lspmessage.pb-c.o: In function `lspmessage__get_packed_size':
./lspmessage.pb-c.c:19: undefined reference to `protobuf_c_message_get_packed_size'
lspmessage.pb-c.o: In function `lspmessage__pack':
./lspmessage.pb-c.c:26: undefined reference to `protobuf_c_message_pack'
lspmessage.pb-c.o: In function `lspmessage__pack_to_buffer':
./lspmessage.pb-c.c:33: undefined reference to `protobuf_c_message_pack_to_buffer'
lspmessage.pb-c.o: In function `lspmessage__unpack':
/home/**/Downloads/CSCE662/HW/skeleton-code/lspmessage.pb-c.c:41: undefined reference to `protobuf_c_message_unpack'
lspmessage.pb-c.o: In function `lspmessage__free_unpacked':
./lspmessage.pb-c.c:50: undefined reference to `protobuf_c_message_free_unpacked'
collect2: error: ld returned 1 exit status
make: *** [sample_client] Error 1
I do not know the reason. Thanks!
回答1:
The C linker works so that only libraries that come after a file are searched.
Try reordering the line like this:
gcc -g -I/usr/include -g sample_client.c lsp.o lspmessage.pb-c.o -o sample_client -L/usr/lib -lprotobuf-c
You can first run that from the command line to see if the problem is fixed. After that, to fix your Makefile, see this question How to use LDFLAGS in makefile.
来源:https://stackoverflow.com/questions/14669299/problems-with-linking-protobuf-library