2010-02-04 55 views
8

我想使用g ++來編譯.cc文件,並且我需要它來鏈接.o文件。如何鏈接.o文件使用g ++

所以,我想:

$g++ -o client -I../ipc -L../messages.o client.cc 
/usr/bin/ld: error: ../messages.o: can not read directory: Not a directory 

我曾嘗試:

$g++ -o client -I../ipc -l../messages.o client.cc 
/usr/bin/ld: error: cannot find -l../messages.pb.o 
$$ ls -l ../messages.o 

-RW-R - R-- 1 hap497 hap497 227936 2010-02-03 22:32 .. /messages.o

你能告訴我如何鏈接到.o文件嗎?

謝謝。

回答

13
$g++ -o client -I../ipc client.cc ../messages.o 
+6

這oughtta做到這一點。 OP的問題是-L指定了一個搜索庫的路徑,而-l指定了一個在該路徑中查找的庫。目標文件只需要作爲參數給出。 – 2010-02-04 22:12:53

+0

謝謝。我已經嘗試了'$ g ++ -o client -I ../ ipc client.cc ../messages.o'但事實證明messages.o需要libprotobuf.a庫。所以我嘗試了'g ++ -o client -I ../ ipc client.cc -l/usr/local/lib/libprotobuf.a -lpthread ../messages.o;我仍然得到'/ usr/bin/ld:../messages.o:in function ipc :: protobuf_AssignDesc_messages_2eproto():ipc/messages.pb.cc:33:error:undefined reference to'google :: protobuf :: DescriptorPool :: generated_pool()' 我很欣賞更多的想法? – n179911 2010-02-04 23:19:15

+2

而不是'-l/usr/local/lib/libprotobuf.a',只需嘗試'-lprotobuf'。 '/ usr/local/lib'可能在你的默認路徑中;如果不是,則用'-L/usr/local/lib'添加它。 '-l'選項將'lib'添加到前面,將'.a'添加到最後。 – 2010-02-04 23:21:22