Кроме того, моя собственная зависимость уже использовала BLAS и LAPACK.
Если я включу любую из этих зависимостей в target_link_libraries раздел, то все в порядке, однако если я включу оба сразу, компиляция завершится с ошибкой
Код: Выделить всё
In file included from /main.cpp:6:
In file included from /bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/Dense:7:
In file included from /bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/Eigenvalues:55:
/bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h:80:1: error: __host__ function 'compute' cannot overload __host__ __device__ function 'compute'
80 | EIGEN_LAPACKE_EIG_SELFADJ(double, double, double, dsyev)
| ^
/bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h:77:9: note: expanded from macro 'EIGEN_LAPACKE_EIG_SELFADJ'
77 | EIGEN_LAPACKE_EIG_SELFADJ_2(EIGTYPE, LAPACKE_TYPE, LAPACKE_RTYPE, LAPACKE_NAME, ColMajor ) \
| ^
/bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h:43:72: note: expanded from macro 'EIGEN_LAPACKE_EIG_SELFADJ_2'
43 | SelfAdjointEigenSolver::compute(const EigenBase& matrix, int options) \
| ^
/bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h:216:29: note: previous declaration is here
216 | SelfAdjointEigenSolver& compute(const EigenBase& matrix, int options = ComputeEigenvectors);
| ^
У меня здесь минимальное воспроизведение кода: один файл main.cpp и сценарий CMake:
Код: Выделить всё
main.cpp:
#define lapack_complex_float std::complex
#define lapack_complex_double std::complex
#define EIGEN_USE_BLAS
#define EIGEN_USE_LAPACKE
#include
int main(void){
Eigen::Matrix3d::Zero()
}
Код: Выделить всё
CMakeList.txt:
cmake_minimum_required (VERSION 3.8)
set(CMAKE_CXX_STANDARD 20)
project ("trial")
find_package(Kokkos REQUIRED)
find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)
find_package(Eigen3 REQUIRED NO_MODULE)
add_executable(main "main.cpp")
target_link_libraries(
main
Kokkos::kokkos
Eigen3::Eigen
BLAS::BLAS
LAPACK::LAPACK
)
Это будет работать, если я удалю ссылку на Kokkos, однако добавлю ссылка Kokkos::kokkos (даже без вызова кода Kokkos) приводит к сбою компиляции.
К вашему сведению, я использовал:
- Кланг 18.1.8
- CUDA/11.8.0
- OpenBLAS-0.3.20
- Eigen-3.4. 0
- kokkos-4.3.01
- openmp=libomp
Подробнее здесь: https://stackoverflow.com/questions/791 ... -and-eigen
Мобильная версия