2010-02-04 107 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