2012-05-01 10 views
10

que grep para otros temas, pero ellos no me ayuda = (. En mi servidor de trabajo, no tengo privilegies sudo, por lo instalo PB conno puede compilar ejemplo de Google búferes de protocolo

./configure --prefix =/home/usuario/local

Luego de crear archivos de origen con el ejemplo "persona" y compilarlo con éxito protoc.

que no tengo PKG-info = (. trato compilarlo con

g ++ -I/home/usuario/local/incluir -L/home/nombre de usuario/local/lib -lprotobuf -lpthread main.cpp person.pb.cc

y luego tener un mil millones es decir, simular errores

person.pb.cc:(.text+0x4cf): undefined reference to ` google :: protobuf :: :: interna kEmptyString'

creo, que es un problema con la vinculación, pero ¿cómo resolverlo?

echo $ LD_LIBRARY_PATH /home/usuario/local/lib

en main.cpp:

#include "person.pb.h" 
... 

Gracias.

Respuesta

19

Ponga la biblioteca al final:

g ++ -I/home/usuario/local/include -L/home/usuario/local/lib main.cpp person.pb.cc -lprotobuf -pthread

de GCC Link Options:

 
-llibrary 
-l library 
    Search the library named library when linking. 
    (The second alternative with the library as a separate argument 
    is only for POSIX compliance and is not recommended.) 

    It makes a difference where in the command you write this option; 
    the linker searches and processes libraries and object files in the 
    order they are specified. 
    Thus, `foo.o -lz bar.o' searches library `z' after file foo.o but 
    before bar.o. If bar.o refers to functions in `z', those functions 
    may not be loaded. 

también, el uso -pthread en lugar de -lpthread como -pthread pueden establecer indicadores para Prepr ocesor y enlazador.

+0

¡GUAU! ¡Es brillante! ¡Gracias! – ZhekakehZ

+0

¡Realmente me has ahorrado mucho tiempo! ¡Gracias! –

2

banderas Biblioteca vinculación van al final de los argumentos del compilador:

g ++ -I/home/usuario// include -L/home/usuario/local/lib main.cpp person.pb locales .cc -lprotobuf -lpthread

Cuestiones relacionadas