2014-04-16 3 views
1

C++로 작성되었으며 BeagleBone ARM 기반 보드 용 OpenCV를 사용하여 응용 프로그램을 상호 컴파일하려고합니다. 대상 OS는 Ubuntu 13.10이고, 호스트 OS는 Ubuntu 12.04이며, 네이티브 컴파일러를 사용하여 두 시스템에서 성공적으로 응용 프로그램을 빌드 할 수 있습니다. 그러나, 우분투 저장소에서 크로스 컴파일러를 사용하여 크로스 컴파일하면 표준 헤더 파일 (비트/stdlib-float.h)이 누락되었다는 오류가 발생합니다. 다음은 동일한 문제를 보여주는 작은 예제입니다 (arm_root 디렉토리에 대상 환경이 있음).OpenCV를 사용하여 ARM 용 cmake와 크로스 컴파일

SRC/cross.cpp :

#include <opencv2/opencv.hpp> 

int main() 
{ 
    cv::Mat m(10, 10, CV_8UC1); 
    return 0; 
} 

CMakeLists.txt :

cmake_minimum_required(VERSION 2.6) 
find_package(OpenCV REQUIRED) 
add_executable(cross src/cross.cpp) 
target_link_libraries(cross ${OpenCV_LIBS}) 

arm_toolchain.cmake (아이디어는 호스트의 크로스 컴파일러 환경에서 표준 C++ 라이브러리에 응용 프로그램을 연결하는 것입니다, 대상 환경의 OpenCV에 연결하십시오. 올바른 선택인지는 확실하지 않습니다.) :

set(CMAKE_SYSTEM_NAME Linux) 
set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc) 
set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++) 
set(CMAKE_FIND_ROOT_PATH /usr/arm-linux-gnueabihf /home/alex/arm_root) 
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 

cmake -DCMAKE_TOOLCHAIN_FILE = ../arm_toolchain.cmake .. & & 메이크업 :

[100%] Building CXX object CMakeFiles/cross.dir/src/cross.cpp.o 
In file included from /home/alex/arm_root/usr/include/opencv2/core/types_c.h:56:0, 
       from /home/alex/arm_root/usr/include/opencv2/core/core_c.h:47, 
       from /home/alex/arm_root/usr/include/opencv2/opencv.hpp:46, 
       from /home/alex/sandbox/cmake/cross/src/cross.cpp:1: 
/home/alex/arm_root/usr/include/stdlib.h:951:31: fatal error: bits/stdlib-float.h: No such file or directory 
compilation terminated. 
make[2]: *** [CMakeFiles/cross.dir/src/cross.cpp.o] Error 1 
make[1]: *** [CMakeFiles/cross.dir/all] Error 2 
make: *** [all] Error 2 
+0

당신이 다른 방법으로 [Buildroot] (http://buildroot.uclibc.org/) 시도? 툴체인, 적절한 툴체인 파일 등을 처리 할 것입니다. – yegorich

+0

동일한 문제가 있습니다. 어떻게 해결 될 수 있습니까? – ransh

+0

기록 용입니다. 나는 그 문제를 해결하지 못했고, 네이티브 컴파일러를 사용하여 보드 자체에서 내 프로그램을 컴파일하기로 결정했습니다. 제 경우에는 시간이 그렇게 중요하지 않았습니다. – Student4K

답변

1

파일이 존재 /home/alex/arm_root/usr/include/bits/stdlib-float.h합니까? 올바른 include 디렉토리를 사용하고 있는지 확인하십시오. 일부 툴체인에는 여러 개의 include 디렉토리가 있습니다. 당신의 툴체인 정의 파일에 다음 줄을 추가하십시오 :.

set(CMAKE_CXX_FLAGS "-isystem /home/alex/arm_root/usr/include") 

또는 등 필요한 파일에 어떤 디렉토리이 컴파일러는 표준 헤더에 대한 올바른 경로를 사용 있는지 확인합니다.

0

포함 경로 문제입니다. 디렉토리가 ${SYSROOT}/usr/include에 없습니다 (${SYSROOT}은 라즈베리 파이의 sysroot가있는 곳입니다). 위치는 ${SYSROOT}/usr/include/arm-linux-gnueabihf입니다.

은 툴체인 파일에 다음 줄을 추가하고 작동합니다 :

set(CMAKE_SYSROOT ${RASPI_SYSROOT}) 
    include_directories(${RASPI_SYSROOT}/usr/include/arm-linux-gnueabihf) 
관련 문제