2

ARM-LinuxベースのシステムでOPENCVをコンパイルしようとしています。この目的のために、次のオプションを使用してツールチェーンのcmakeファイルを作成しました

SET (CMAKE_SYSTEM_NAME Linux)
SET (CMAKE_SYSTEM_VERSION 1)
SET (CMAKE_SYSTEM_PROCESSOR arm)

SET (CMAKE_C_COMPILER "/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-gcc")
SET (CMAKE_CXX_COMPILER "/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-g++")

SET (CMAKE_FIND_ROOT_PATH "/usr/local/arm/4.3.1-eabi-armv6/")
SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

SET (LIBRARY_OUTPUT_PATH "/home/xxx/OpenCV-2.4.3/lib")
SET (OPENCV_CONFIG_FILE_INCLUDE_DIR "/home/xxx/OpenCV-2.4.3")
SET (OPENCV_WARNINGS_ARE_ERRORS OFF)

cmakeコマンドとmakeコマンドを実行した後、次のエラーが発生します。

In file included from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/bits/postypes.h:47,
             from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/iosfwd:47,
             from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/ios:44,
             from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/ostream:45,
             from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/iostream:45,
             from /home/zwang/OpenCV-2.4.3/3rdparty/openexr/Half/half.h:88,
             from /home/zwang/OpenCV-2.4.3/3rdparty/openexr/Half/half.cpp:48:
/usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/cwchar:52:24: error: wchar.h: No such file or directory

要約:コンパイラーはwchar.h、stdio.h、wctype.h、ctype.hを見つけることができません。これらのヘッダーは/usr/local/arm/4.3.1-eabi-armv6/usr/includeにあります。cmakeオプションを使用してこのフォルダーを含める必要があると思います。どうやってやるの?

4

3 に答える 3

3

include_directories次のコマンドを使用してこれを行うことができます。

include_directories(SYSTEM /usr/local/arm/4.3.1-eabi-armv6/usr/include)

より堅牢な解決策は、このパスでヘッダーを検索し、見つかった場合はディレクトリを含めるか、そうでない場合は失敗することです。ローカル パスを CMakeLists.txt にハードコーディングするよりも堅牢であるだけでなく、後のビルド時ではなく CMake 実行時に失敗するという別の利点もあります。これは、 を使用して行うのが最適find_pathです。

たとえば、次のことができます。

find_path(WcharPath wchar.h PATHS /usr/local/arm/4.3.1-eabi-armv6/usr/include)
if(WcharPath)
  include_directories(SYSTEM ${WcharPath})
else()
  message(FATAL_ERROR "Failed to find wchar.h")
endif()
于 2013-03-04T19:46:08.527 に答える
1

これを解決するには、CMAKE_SYSROOT を設定します。に設定する必要があるようです

/usr/local/arm/4.3.1-eabi-armv6/

この場合。

http://www.cmake.org/cmake/help/v3.0/manual/cmake-toolchains.7.html#cross-compiling

于 2014-05-15T13:26:11.450 に答える
-1

環境変数として設定できCMAKE_INCLUDE_PATHます。フォーマットの説明は、CMAKE のドキュメントに記載されています。

http://www.cmake.org/Wiki/CMake_Useful_Variables

于 2013-03-04T19:18:35.057 に答える