2011-12-27 21 views
5

Mis problemas de uso de los búfers de protocolo de Google tienen dos partes, una es sobre las opciones del compilador, otra es la compilación cruzada. La máquina de construcción es una Power6, 64 bits; máquina host es una PowerPC450, 32 bits. Gcc 4.1.2.Buffers de protocolo de Google compilación cruzada

primer problema es acerca de las opciones del compilador:

Estoy tratando de instalar búferes de protocolo de Google en una máquina PowerPC que requiere compilación cruzada. La máquina de construcción es una Power6, 64 bits; máquina host es una PowerPC450, 32 bits. En primer lugar he intentado instalar en la máquina de construcción directamente, con opciones para contar compilador cuál utilizar:

./configure --prefix=/home/where_to_install --host=powerpc-bgp-linux 

a continuación, hacer, hacer el cheque, hacer que la instalación, todo está bien. Creo que he especificado el equipo host, que debe incluir suficiente información que compilar debe saber. Cuando intento compilar mi código con el error

/bgsys/drivers/ppcfloor/gnu-linux/powerpc-bgp-linux/bin/g++ -g -zmuldefs -Xlinker -I/home/somewhere_installed/include $sourceFile -o $fileName -L/home/somewhere_installed/lib -lz -lstdc++ -lrt -lpthread -lm -lc -lprotobuf -lprotoc msg.pb.cc 

me dieron:

g++: unrecognized option '-zmuldefs' 
In file included from zht_util.h:20, 
       from hash-phm.cpp:9: 
meta.pb.h:9:42: error: google/protobuf/stubs/common.h: No such file or directory 

y una gran cantidad de errores acerca de las variables en COMMON.H no fueron hallados.

Sé que es porque el compilador no reconoce la opción -zmuldefs por lo que no puede encontrar el archivo common.h que sí existe. Busqué en Google y no tuve una idea clara. ¿Cómo puedo hacer que el compilador pueda usar la opción o pueda encontrar el archivo? ¿O hay algún problema en mi comando de compilación?


El segundo problema es acerca de la compilación cruzada. El archivo léame de los búferes de protocolo de Google no es claro acerca de cómo exactamente compilar cruzado. Dijo que debo usar --with-protoc = protoc para decirme qué debo usar, OK, pero antes de eso tengo que instalar una copia para el equipo host. Yo uso el comando primero para instalar una copia para el host

./configure --prefix=/home/where_to_install/built --host=powerpc-bgp-linux 

y luego hacer, hacer la instalación.

A continuación, cruzar por debajo de compilar con el cual utiliza mismo compilador como máquina host utiliza:

./configure --prefix=/home/tonglin/Installed/built_3 CC=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-gcc CXX=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-g++ --host=powerpc-bgp-linux --with-protoc=/home/where_already_Installed/built/bin/protoc 

A continuación, hacer y ha obtenido un error:

una gran cantidad de compilar información ... blabla .....

collect2: ld returned 1 exit status 
make[3]: *** [protoc] Error 1 
make[3]: Leaving directory `/gpfs/home/somewere/src/protobuf-2.4.1/src' 
make[2]: *** [all] Error 2 
make[2]: Leaving directory `/gpfs/home/somewere/src/protobuf-2.4.1/src' 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory `/gpfs/home/tonglin/Installed/src/protobuf-2.4.1' 
make: *** [all] Error 2 

¿Dónde hice mal? También probé con el compilador especificado en la primera instalación (para el host), obtuvo el mismo error que la segunda instalación anterior. Una vez que tenga éxito para terminar las instalaciones, aquí tendré dos instalaciones, ¿qué debo usar? ¿Hay alguien que pueda darme un ejemplo de cómo puedo cruzar compiladores de protocolos de Google? No encontré ningún ejemplo detallado sobre esto.

Muchas gracias,

-Tony

+0

Tengo un problema similar ... Estoy integrando ProtoBuf lib en Android Project a través de JNI Layer. Estoy siguiendo el tutorial [CPP_ProtoBuf] (https://developers.google.com/protocol-buffers/docs/cpptutorial), pero al compilarlo producen un error similar. ** jni /./ mysense/wrapper/addressbook.pb.h: 9: 42: error fatal: google/protobuf/stubs/common.h: No existe el archivo o el director **. Alguna sugerencia aqui? – CoDe

Respuesta

5

que voy a tratar de responder a la segunda pregunta:

cuando cruzo-compilados protobuf la biblioteca por primera vez instalado en mi máquina host .Esto es relativamente sencillo:

./configure --prefix=/usr 
make 
make check 
make install 

entonces debería tenerlo funcionando en su máquina de construcción. No olvide hacer un

make distclean 

después o los artefactos de esta compilación interferirán con la siguiente compilación.

Ahora construir para mi otra máquina (en la construcción de la máquina) mediante la configuración con

./configure --host=ppc CC=powerpc-none-linux-gnuspe-gcc CXX=powerpc-none-linux-gnuspe-g++ --with-protoc=protoc --prefix=/path/to/built/files 

luego hacer el maquillaje habitual, haga el cheque y hacer la instalación y los archivos que tienen que copiar en su otra máquina están en/patch/to/built/files.

+0

gracias por su respuesta, pero no tengo acceso directo a las máquinas host a pesar de que comparten discos duros con la máquina de compilación, por lo que no puedo instalar nada directamente en ellas. Lo que puedo hacer es compilarlo e instalar la versión de host en una máquina de compilación. ¿Alguna otra solución aparte de la instalación en la máquina host? – Tony

+0

No entiendo del todo. Entonces, ¿tiene acceso a su máquina de compilación, pero no a su máquina host? Entonces, ¿cómo se ejecutan los programas en su máquina host? Si puede ejecutar cosas en esa máquina, puede instalar todo en las unidades compartidas y ejecutarlas allí. – dinyar

+0

Sí, es una gran máquina. Solo puedo acceder al nodo principal, que es la máquina de creación, y puedo usar los nodos de trabajo (máquina host) mediante el uso de scripts Cobalt. Shell no es compatible con los nodos de trabajo. – Tony

0

Para la primera pregunta, después de compilado e instalado la biblioteca protobuf con

./configure --prefix=/your_dir 
make 
make check 
make install 

Es necesario agregar la ruta de inclusión en/your_dir/include a su makefile con la bandera -I, por ejemplo

-I/your_dir/include 

.

Cuestiones relacionadas