web-dev-qa-db-ja.com

CMakeがOpenMPを見つけることができません

OpenMPでコンパイルしようとしています。私の_CMakeLists.txt_には次の行が含まれています

find_package(OpenMP REQUIRED)

とCMakeエラー

_CMake Error at /opt/ros/groovy/share/catkin/cmake/catkinConfig.cmake:72 (find_package):
  Could not find a configuration file for package openmp.

  Set openmp_DIR to the directory containing a CMake configuration file for
  openmp.  The file will have one of the following names:

    openmpConfig.cmake
    openmp-config.cmake
_

ファイルシステムを確認すると、_/usr/share/cmake-2.8/Modules/FindOpenMP.cmake_はありますが、_openmpConfig.cmake_または_openmp-config.cmake_はありません。これを修正するには何をする必要がありますか?

14
ehuang

OpenMpはパッケージではありません。サポートされている場合は、コンパイラの一部として提供されます。それに応じて_CMAKE_C_FLAGS_または_CMAKE_CXX_FLAGS_を設定してみてください。例えば:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")は、OpenMPが使用されている場合、Cソースをコンパイルするためにgccをアクティブにします。他のコンパイラの場合、最初にコンパイラを検出してから、適切なフラグを追加する必要があります

7
GradGuy

CMakeには、2.xバージョンでもFindOpenMPモジュールがあります。 http://www.cmake.org/cmake/help/v3.0/module/FindOpenMP.html を参照してください

だから私はこれをします:

OPTION (USE_OpenMP "Use OpenMP" ON)
IF(USE_OpenMP)
  FIND_PACKAGE(OpenMP)
  IF(OPENMP_FOUND)
    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
  ENDIF()
ENDIF()
27
iNFINITEi

iNFINITEiの答えは私にはうまくいきません。私はUbuntuを使用して、OpenCV静的ライブラリを使用してコードをコンパイルしようとしています。リンクした後、私はこれを手に入れました:

'"/usr/bin/ld:/usr/local/lib/libopencv_core.a(parallel.cpp.o):シンボル' omp_set_dynamic @@ OMP_1.0 '"'への未定義の参照

だから私はiNFINITEiのアプローチを試しました、そして私は持っています:

'/usr/local/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:211でのCMakeエラー(メッセージ):FIND_PACKAGE_HANDLE_STANDARD_ARGS()呼び出しスタックにREQUIRED_VARSが指定されていません(最新の呼び出しが最初):/ usr/local/share/cmake -3.13/Modules/FindOpenMP.cmake:513(find_package_handle_standard_args)CMakeLists.txt:8(FIND_PACKAGE) '

最後に、"-fopenmp=libomp"CMAKE_CXX_FLAGSに追加して、問題を解決しました。

0
Jason Zhao