1

コンパイルする必要のあるファイルがいくつかあります。これがコマンドです。lsp.o に依存する sample_client.c。ここで、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

ここに私のメイクファイルがあります、

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-co -o sample_client -L/usr/lib -lprotobuf-c

しかし、 lsp.c と lsp.h を変更するとどうなるでしょうか?

4

1 に答える 1

0

あなたLDFLAGSが正しくないように私には見えます。次のことを試してください。

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

ディレクトリ-Lとライブラリの順序が間違っているようです。

また、 への追加の呼び出しを削除しました-g

于 2013-02-06T22:00:16.140 に答える