protocol-buffers - 链接 protobuf 库的问题

标签 protocol-buffers

我不熟悉makefile,这是我的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)

当我运行 make -f Make 时,出现这些错误。

**@**:./$ 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

我不知道原因。谢谢!

最佳答案

C 链接器的工作方式是仅搜索文件后面的库。

尝试像这样重新排序该行:

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

您可以首先从命令行运行该命令来查看问题是否已解决。之后,要修复您的 Makefile,请参阅此问题 How to use LDFLAGS in makefile .

关于protocol-buffers - 链接 protobuf 库的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14669299/

相关文章:

c++ - CMake:当 *.proto 文件更改时有条件地生成 protobuf `*pb.{h|cpp}` 文件

python - 使用 Python 从 Protobuf 解码图像

c++ - 带有谷歌时间戳的 Protobuf C++ 消息导致段错误

f# - 如何将 Google 重复字段转换为标准 F# 列表或数组 (FSharp.GrpcCodeGenerator)?

c++ - 在 C++ 套接字编程中使用 google protobuf 序列化和反序列化消息

java - 自定义 mapstruct 以忽略 protobuff 字段

java - ZeroMQ+Protobuf 的替代品(ZeroMQ 对 Java 来说已经死了吗?)

protocol-buffers - "wire"对于二进制有线格式的 pb 意味着什么?

golang protobuf 从生成的 json 标签中删除 omitempty 标签

c# - 从 C# 读取 protobuf3 自定义选项