2010-02-04 9 views
8

Estoy tratando de usar g ++ para compilar un archivo .cc, y lo necesito para vincular un archivo .o.Cómo puedo vincular un archivo .o usando g ++

así que he intentado:

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

y he intentado:

$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

¿Puede decirme cómo vincular en un archivo .o?

Gracias.

Respuesta

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

Esto debería hacerlo. El problema del OP es que -L especifica una ruta para buscar bibliotecas, y -l especifica una biblioteca para encontrar en esa ruta. Un archivo objeto solo necesita ser dado como argumento. –

+0

Gracias. He intentado '$ g ++ -o cliente -I ../ ipc client.cc ../messages.o' Pero resulta que los mensajes.o necesitan libprotobuf.una biblioteca. Así que probé 'g ++ -o client -I ../ ipc client.cc -l/usr/local/lib/libprotobuf.a -lpthread ../messages.o; Y todavía obtengo '/ usr/bin/ld: ../messages.o: en la función ipc :: protobuf_AssignDesc_messages_2eproto(): ipc/messages.pb.cc: 33: error: referencia indefinida a' google :: protobuf :: DescriptorPool :: generated_pool() ' Agradezco más ideas? – n179911

+2

En lugar de '-l/usr/local/lib/libprotobuf.a', intente solo' -lprotobuf'. '/ usr/local/lib' probablemente esté en tu ruta predeterminada; si no, agréguelo con '-L/usr/local/lib'. La opción '-l' agrega 'lib' al frente y '.a' al final. –

Cuestiones relacionadas