0

Armadillo C++ ライブラリ (バージョン 6.6) をビルドしようとしていますが、正常にビルドされます。ただし、私の問題は、OpenBLAS のソース コードを個別にダウンロードしてビルドしたことです。ローカルでビルドしたOpenBLASをArmadilloに使ってもらい、生成したArmadilloライブラリに静的にリンクさせたい。

そう、

  1. Armadillo CMake に特定の OpenBLAS を使用するように指示するにはどうすればよいですか?
  2. 上記の OpenBLAS を静的にリンクするように Armadillo CMake に指示して、OpenBLAS を含む libarmadillo を生成するにはどうすればよいですか?
4

2 に答える 2

1

ソースから OpenBLAS をインストールした場合、それは非標準の場所 (私にとっては /opt/OpenBLAS) にあり、非標準の名前 (OpenBLAS) を持っています。したがって、cmake がそれを見つけるのは困難です。問題を解決するには、your_sources_dir/cmake_aux/Modules/ARMA_FindOpenBLAS.cmake のファイルを次のように編集してください。

set(OpenBLAS_NAMES)
set(OpenBLAS_NAMES ${OpenBLAS_NAMES} openblaso)
set(OpenBLAS_NAMES ${OpenBLAS_NAMES} openblasp)
set(OpenBLAS_NAMES ${OpenBLAS_NAMES} openblas )
set(OpenBLAS_NAMES ${OpenBLAS_NAMES} OpenBLAS )

set(OpenBLAS_TMP_LIBRARY)
set(OpenBLAS_TMP_LIBRARIES)


foreach (OpenBLAS_NAME ${OpenBLAS_NAMES})
  find_library(${OpenBLAS_NAME}_LIBRARY
    NAMES ${OpenBLAS_NAME}
    PATHS ${CMAKE_SYSTEM_LIBRARY_PATH} /lib64 /lib /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib /opt/local/lib64 /opt/local/lib /opt/OpenBLAS/lib
    )

  set(OpenBLAS_TMP_LIBRARY ${${OpenBLAS_NAME}_LIBRARY})

  if(OpenBLAS_TMP_LIBRARY)
    set(OpenBLAS_TMP_LIBRARIES ${OpenBLAS_TMP_LIBRARIES} ${OpenBLAS_TMP_LIBRARY})
  endif()
endforeach()


# use only one library                                                                                                                                                                                                                       

if(OpenBLAS_TMP_LIBRARIES)
  list(GET OpenBLAS_TMP_LIBRARIES 0 OpenBLAS_LIBRARY)
endif()


if(OpenBLAS_LIBRARY)
  set(OpenBLAS_LIBRARIES ${OpenBLAS_LIBRARY})
  set(OpenBLAS_FOUND "YES")
else()
  set(OpenBLAS_FOUND "NO")
endif()


if(OpenBLAS_FOUND)
  if (NOT OpenBLAS_FIND_QUIETLY)
    message(STATUS "Found OpenBLAS: ${OpenBLAS_LIBRARIES}")
  endif()
else()
  if(OpenBLAS_FIND_REQUIRED)
    message(FATAL_ERROR "Could not find OpenBLAS")
  endif()
endif()


# mark_as_advanced(OpenBLAS_LIBRARY)

次に、使用してアルマジロの通常のインストールを続行しますcmake.

この提案がお役に立てば幸いです。

于 2016-07-05T21:50:29.600 に答える