2011-12-27 3 views
5

구글 프로토콜 버퍼 사용의 문제점은 두 부분으로 나누었습니다. 하나는 컴파일러 옵션에 관한 것이고 다른 하나는 크로스 컴파일입니다. 빌드 머신은 Power6, 64 비트입니다. 호스트 컴퓨터는 PowerPC450, 32 비트입니다. Gcc 4.1.2. 내가 크로스 컴파일을 필요로하는 파워 시스템에서 구글 프로토콜 버퍼를 설치하기 위해 노력하고있어구글 프로토콜 버퍼 크로스 컴파일

:

첫 번째 문제는 컴파일러 옵션에 관한 것입니다. 빌드 머신은 Power6, 64 비트입니다. 호스트 컴퓨터는 PowerPC450, 32 비트입니다.

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

그런 다음 확인 점검을 만들 수 있도록 설치, 모두의 벌금을 : 는 첫째로 내가 사용하는 컴파일러에게 옵션을 직접 빌드 머신에 설치했습니다. 필자는 컴파일 할 필요가있는 충분한 정보를 포함해야하는 호스트 컴퓨터를 지정했다고 생각합니다. 내가

/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 

내가 주어진 오류 내 코드를 컴파일 할 때 :

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 

및 common.h에 변수에 대한 오류를 많이

가 발견되지 않았다.

컴파일러가 -zmuldefs 옵션을 인식하지 못하기 때문에 존재하는 common.h 파일을 찾을 수 없다는 것을 알고 있습니다. 나는 인터넷 검색을하고 명확한 아이디어를 얻지 못했다. 컴파일러가 옵션을 사용할 수있게하거나 파일을 찾을 수있게하려면 어떻게해야합니까? 아니면 내 컴파일 명령에 어떤 문제가 있습니까?


두 번째 문제는 크로스 컴파일에 관한 것입니다. Google 프로토콜 버퍼의 readme 파일은 정확히 교차 컴파일 방법에 대해 명확하지 않습니다. 그것은 --with-protoc = protoc을 사용하여 configure에 사용할 것을 말해야한다고 말했지만, 그 전에는 호스트 컴퓨터에 대한 복사본을 설치해야합니다. 먼저 명령을 사용하여 호스트 용 사본을 설치합니다.

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

다음을 make install하십시오.

그런 다음 호스트 컴퓨터 사용과 동일한 컴파일러를 사용하는 아래로 크로스 컴파일 : 다음

./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 

하고 오류가있어 :

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 

어디에서 잘못 했습니까? 나는 또한 첫 번째 설치 (호스트)에 지정된 컴파일러로 시도했지만 두 번째 설치가 위에서 수행 한 것과 동일한 오류가 발생했습니다. 설치가 완료되면 여기에 두 가지 설치가 적용됩니다. 사용해야합니까? 어떤 사람이 나에게 정확하게 Google 프로토콜 버퍼를 컴파일 할 수있는 방법을 보여줄 수 있습니까? 이에 대한 자세한 예제를 찾지 못했습니다. 내가 두 번째 질문에 대답하려고거야

고마워,

토니

+0

비슷한 문제가 있습니다 ... JNI 레이어를 통해 Android Project에서 ProtoBuf lib를 통합하고 있습니다. 튜토리얼 [CPP_ProtoBuf] (https://developers.google.com/protocol-buffers/docs/cpptutorial)을 따르고 있지만 컴파일하는 동안 비슷한 오류가 발생합니다. ** jni /./ mysense/wrapper/addressbook.pb.h : 9 : 42 : 치명적인 오류 : google/protobuf/stubs/common.h : 해당 파일이나 디렉터가 없습니다 **. 여기에 어떤 제안? – CoDe

답변

5

는 :

내 호스트 시스템에 처음으로 설치 protobuf 라이브러리를 컴파일 교차하는 경우 .이는 비교적 간단합니다.

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

그런 다음 빌드 시스템에서 실행해야합니다.

make distclean 

나중에이 컴파일의 인공물이 다음 빌드를 방해하게됩니다.

은 지금은 그런 다음 설치 파일이 당신이 당신의 다른 컴퓨터에 복사 할 필요가 평소 메이크업을 체크하고 확인

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

로 구성하여 (빌드 머신에서) 내 다른 기계를 구축/patch/to/built/files에 있습니다. 예를 들어, 당신은 your_dir /는 -I 플래그와 메이크 파일에 포함/아래에 포함 경로를 추가해야합니다

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

와 첫 번째 질문에 대한

+0

답장을 보내 주셔서 감사합니다.하지만 호스트 컴퓨터에 직접 액세스 할 수는 없지만 하드 드라이브를 빌드 컴퓨터와 공유하기 때문에 직접 설치할 수는 없습니다. 내가 할 수있는 것은 그것을 교차 컴파일하고 빌드 머신에 호스트 버전을 설치하는 것이다. 호스트 컴퓨터에 설치하는 것 이외의 다른 솔루션? – Tony

+0

나는 꽤 이해하지 못한다. 따라서 빌드 머신에 액세스 할 수 있지만 호스트 머신에는 액세스 할 수 없습니까? 그런 다음 호스트 시스템에서 프로그램을 어떻게 실행합니까? 해당 컴퓨터에서 물건을 실행할 수 있으면 공유 드라이브에 모든 것을 설치하고 실행할 수 있습니다. – dinyar

+0

네, 그건 큰 기계입니다. 빌드 머신 인 헤드 노드에만 액세스 할 수 있으며 코발트 스크립트를 사용하여 작업 노드 (호스트 시스템)를 사용할 수 있습니다. 쉘은 작업 노드에서 지원되지 않습니다. – Tony

0

, 당신은 컴파일과 설치 후 protobuf 라이브러리,

-I/your_dir/include 

.

관련 문제