2013-02-06 67 views
1

我有幾個需要編譯的文件。 這裏是命令。 sample_client.c依賴於lsp.o.現在我改變了lsp.c和lsp.h.我該如何編譯才能將此更改有效地轉換爲lsp.o?如何使用gcc編譯多個文件

主要功能是在sample_client.c中,lsp.c沒有主函數。

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 [email protected] 

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?

+2

使用makefile。 – flup

+0

對不起,我不知道如何使用makefile。我用makefile更新了我的問題。對不起,我對此並不熟悉。 – user2036452

+0

努力嘗試,因爲那是做它的方式 –

回答

0

它在我看來像你的LDFLAGS是不正確的。請嘗試以下操作:

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

它看起來像你有目錄-L和庫不按順序。

另外,我爲您刪除了對-g的額外呼叫。

+0

它不起作用。我認爲問題不在這裏。非常感謝。 – user2036452