cmakeList 오류 치명적 오류 protobuf.pb.h를 컴파일 할 때 : 그런 파일이나 디렉토리 : / protobuf / port_def.inc 구글 없다

파일을 쓰기 Protobuf, 컴파일러는 두 개의 파일 .CC과 .H 파일을 생성합니다.

수출 LD_LIBRARY_PATH = / usr / 지방 / lib에

protoc --cpp_out =. / forward_protobuf.proto

단일 컴파일 명령 : G ++ -o pub_boche2.out publish_boche.cpp protobuf / forward_protobuf.pb.cc -lprotobuf -lpthread . -std = C ++ 11 -lpaho-mqtt3as

그러나에 cmakeList의 상황이 컴파일되어있다.

/mnt/hgfs/V2X_GT_code/parkingProject/appv_forward/src/appv_forward.cpp:4에서 :
/mnt/hgfs/V2X_GT_code/parkingProject/appv_forward/src/../inc/../protoBuf/forward_protobuf.pb.h:10 : 40 : 치명적인 오류 : 그런 파일이나 디렉토리 : / protobuf / port_def.inc 구글
컴파일이 종료되지 않습니다.
 

당신이 환경을 실행하려면 무엇을 볼 수있는이 시점의 필요에 따라 x86 아키텍처 또는 아키텍처 팔이다

이 디렉토리는 라이브러리의 암입니다

/opt/genvict-imx-fb/4.1.15-1.2.1/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib

 

이 디렉토리는 X86 라이브러리 파일입니다

를 / usr / local / lib로

는 / usr / lib 디렉토리

사용 readelf -h 라이브러리 파일  에는 스키마 파일을 볼 수 있습니다

 

컴파일러 팔 protobuf 라이브러리 시스템의 리눅스 버전

 

준비 조건 :

설치 및 GCC 컴파일러를 만들기 1

2. 기타 장착 암 또는 암 - 리눅스 컴파일러

당신은-GCC 팔 리눅스 -v 및 GCC -v와 컴파일러 버전을 확인할 수 있습니다.

 

공식 웹 사이트에서 protobuf-2.5.0.tar.gz를 다운로드합니다.

첫 번째 단계는 86 라이브러리와 protoc의 버전을 컴파일하는 것입니다,

다음과 같은 일련의 명령을 수행

타르 -zxvf protobuf-2.5.0.tar.gz

protobuf-2.5.0 CD

./configure를

하다

메이크업 체크

sudo는 메이크업 설치

다음 단계는 리눅스에서 실행할 수 protoc에 있기 때문에 위의 단계가 작을 수 없습니다, 그래서 그 다음 우리가 리눅스 protobuf 라이브러리와 protoc의 버전을 컴파일 한 후, 컴파일 팔 버전으로 시작해야합니다.

다음은 팔 버전을 컴파일 시작

청소하기

./configure를 --host = 팔 리눅스 --with-protoc = protoc

하다

아무것도 밖으로 팔 컴파일 라이브러리의 잘못된 버전을 갔다하지 않는 경우, 자신의 위치입니다

protobuf-2.5.0 / src에 / .libs /

해당 값이 machin의 ARM 경우, 다음 작업이 완료, 파일 정보를 볼 수 readelf -h libprotobuf-lite.a를 사용합니다.
 

 

현재 디렉토리에 압축 해제에서이 라이브러리를 설치 한 후 생성됩니다 /src/.libs/ 아래

 

해결 방법 :이 경우 경우, 그래서 X86 아키텍처를 필요로하지 않는 크로스 컴파일러 툴 체인의 구성 디렉토리 (팔)에 재 - 추가

그러나 컴파일 타임 오류가 않습니다

디렉토리 수정  자신의 실제 상황에 따라 기록 할 # 디렉토리 필요합니다.

 --prefix = ./configure를 /opt/genvict-imx-fb/4.1.15-1.2.1/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr --host = ARM 리눅스 --with- = Protoc Protoc   
  만들기는 # 설치
이 경우, 다음 오류가 컴파일되지 않습니다

 

도서관은 구분하기 위해 정적 라이브러리 또는 DLL을 포함해야합니다

#cmake verson 
cmake_minimum_required (버전 2.8)
#add gdb를 
세트 (CMAKE_CXX_FLAGS_DEBUG "$ ENV {CXXFLAGS} -O0 -Wall -G2 -ggdb")
#project 이름의 
프로젝트 (v2x_pad_OBU_can)

#INCLUDE cmake 파일이
포함 (../ toolchain.cmake)

#compile 파라미터
세트 (CMAKE_CXX_FLAGS "-std = C ++ 11 CMAKE_CXX_FLAGS $ {} ')

#set가 출력 경로 
설정 (EXECUTABLE_OUTPUT_PATH의 $ {PROJECT_SOURCE_DIR} / 빈) 
세트 (LIBRARY_OUTPUT_PATH의 $ {PROJECT_SOURCE_DIR} / lib에)

#head 파일 경로 
include_directories의 ( 
INC 
../libcomsocket/inc
../libv2xgeneral/inc
../libv2xgeneral/inc/msg
../libv2xgeneral/inc/codec
../libv2xgeneral/inc/rapidjson
_Install / 포함
)

#source 디렉토리 
aux_source_directory (SRC SRC_LIST)

#link 디렉토리
link_directories (
../../libcomsocket/lib
../../libv2xgeneral/lib
../_install/lib
../lib
)

#add 실행 파일 
add_executable ($ {PROJECT_NAME} $ {SRC_LIST}) 

#add 링크 라이브러리 
target_link_libraries ($ {PROJECT_NAME} comsocket v2xgeneral pthread와 PAHO - mqtt3as libprotobuf.a libprotoc.a )

정적 라이브러리는 전체 이름을 쓸 필요가

동적 객체의 앞과 lib에 접미사 .so를 제거 뒤에 넣을 수 있습니다.

게시 된 101 개 원래 기사 · 원 찬양 73 · 전망 120 000 +

추천

출처blog.csdn.net/usstmiracle/article/details/103469205