无法在 Windows 上使用 xtensor-blas
Cannot use xtensor-blas on Windows
免责声明:我是building/make/packages/cmake的菜鸟。
我的目标: 在 C++ 中使用 xtensor-blas
库
我的环境: Win10 x64,CLion2021
我的问题: 无法编译最简单的示例。关于项目依赖关系。
我试过:
1) 使用我能用的每个教程手动下载和编译 openBLAST google - 总是遇到不同的问题。要么我没有“nmake”,要么由于某种原因构建失败,或者我得到“未定义的引用”等等——我已经不知所措了几天。逐步演练将不胜感激。
2) 我最接近的是使用 anaconda conda install -c conda-forge openblas
,然后将 xtl
、xtensor
、xtensor-blas
中的“include”目录复制粘贴到我的项目中。我的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.19)
project(tstxtensor3)
set(CMAKE_CXX_STANDARD 20)
add_executable(tstxtensor3 main.cpp)
include_directories(.)
add_definitions(-DHAVE_CBLAS=1)
set(OpenBLAS_DIR c:/Users/pruglo/anaconda3/envs/evn/Library/share/cmake/OpenBLAS/)
find_package(OpenBLAS REQUIRED)
if (OpenBLAS_FOUND)
include_directories(${OpenBLAS_INCLUDE_DIRS})
target_link_libraries(tstxtensor3 c:/Users/pruglo/anaconda3/envs/evn/Library/lib/openblas.lib ${OpenBLAS_LIBRARY})
else ()
message("OpenBLAS NOT FOUND!")
endif ()
Cmake 加载成功,OpenBLAS_FOUND
为 true
。但是当我编译我的 cpp 时,我得到 error while loading shared libraries: openblas.dll: cannot open shared object file: No such file or directory Process finished with exit code 127
注意:OpenBLAS_INCLUDE_DIRS
扩展为 c:/Users/pruglo/anaconda3/envs/evn/Library/include/openblas
,OpenBLAS_LIBRARY
扩展为 c:/Users/pruglo/anaconda3/envs/evn/Library/bin/openblas.dll
补充问题:
xtensor-blas
我需要 LAPACK 或其他东西吗?
- 我能否以可移植的方式构建我的项目,这样我就不需要为我开发的每台电脑安装所有东西?
免责声明:我远不是Windows专家(我只是在持续集成中使用它进行测试)。
您应该能够使用 xtensor-blas 提供的目标。所以应该可以做的是(在任何平台上):
cmake_minimum_required(VERSION 3.1)
set(CMAKE_BUILD_TYPE Release)
project(myexec)
find_package(xtensor)
find_package(xtensor-blas)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} xtensor xtensor-blas)
既然你说的是 conda,这确实是我觉得最简单并且适用于所有平台的方法。除了
,我真的不需要做太多其他事情
conda install -c conda-forge cmake xtensor xtensor-blas
(在我加载的环境中)。
这里可能有一个陷阱:请注意,我使用了 conda 中的 CMake。可能是它为 conda 配置了正确的路径(但说实话我不太确定)。
为了完整起见,我认为您可以使用(从源目录,加载 conda 环境):
conda install -c conda-forge ninja
cmake -G "NMake Makefiles" -Bbuild
cd build
nmake
为了独立,我用文档中的一个例子进行了测试:
#include <xtensor.hpp>
#include <xtensor-blas/xlinalg.hpp>
int main()
{
xt::xarray<double> a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
auto d = xt::linalg::det(a);
std::cout << d << std::endl; // 6.661338e-16
return 0;
}
免责声明:我是building/make/packages/cmake的菜鸟。
我的目标: 在 C++ 中使用 xtensor-blas
库
我的环境: Win10 x64,CLion2021
我的问题: 无法编译最简单的示例。关于项目依赖关系。
我试过:
1) 使用我能用的每个教程手动下载和编译 openBLAST google - 总是遇到不同的问题。要么我没有“nmake”,要么由于某种原因构建失败,或者我得到“未定义的引用”等等——我已经不知所措了几天。逐步演练将不胜感激。
2) 我最接近的是使用 anaconda conda install -c conda-forge openblas
,然后将 xtl
、xtensor
、xtensor-blas
中的“include”目录复制粘贴到我的项目中。我的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.19)
project(tstxtensor3)
set(CMAKE_CXX_STANDARD 20)
add_executable(tstxtensor3 main.cpp)
include_directories(.)
add_definitions(-DHAVE_CBLAS=1)
set(OpenBLAS_DIR c:/Users/pruglo/anaconda3/envs/evn/Library/share/cmake/OpenBLAS/)
find_package(OpenBLAS REQUIRED)
if (OpenBLAS_FOUND)
include_directories(${OpenBLAS_INCLUDE_DIRS})
target_link_libraries(tstxtensor3 c:/Users/pruglo/anaconda3/envs/evn/Library/lib/openblas.lib ${OpenBLAS_LIBRARY})
else ()
message("OpenBLAS NOT FOUND!")
endif ()
Cmake 加载成功,OpenBLAS_FOUND
为 true
。但是当我编译我的 cpp 时,我得到 error while loading shared libraries: openblas.dll: cannot open shared object file: No such file or directory Process finished with exit code 127
注意:OpenBLAS_INCLUDE_DIRS
扩展为 c:/Users/pruglo/anaconda3/envs/evn/Library/include/openblas
,OpenBLAS_LIBRARY
扩展为 c:/Users/pruglo/anaconda3/envs/evn/Library/bin/openblas.dll
补充问题:
xtensor-blas
我需要 LAPACK 或其他东西吗?- 我能否以可移植的方式构建我的项目,这样我就不需要为我开发的每台电脑安装所有东西?
免责声明:我远不是Windows专家(我只是在持续集成中使用它进行测试)。
您应该能够使用 xtensor-blas 提供的目标。所以应该可以做的是(在任何平台上):
cmake_minimum_required(VERSION 3.1)
set(CMAKE_BUILD_TYPE Release)
project(myexec)
find_package(xtensor)
find_package(xtensor-blas)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} xtensor xtensor-blas)
既然你说的是 conda,这确实是我觉得最简单并且适用于所有平台的方法。除了
,我真的不需要做太多其他事情conda install -c conda-forge cmake xtensor xtensor-blas
(在我加载的环境中)。
这里可能有一个陷阱:请注意,我使用了 conda 中的 CMake。可能是它为 conda 配置了正确的路径(但说实话我不太确定)。
为了完整起见,我认为您可以使用(从源目录,加载 conda 环境):
conda install -c conda-forge ninja
cmake -G "NMake Makefiles" -Bbuild
cd build
nmake
为了独立,我用文档中的一个例子进行了测试:
#include <xtensor.hpp>
#include <xtensor-blas/xlinalg.hpp>
int main()
{
xt::xarray<double> a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
auto d = xt::linalg::det(a);
std::cout << d << std::endl; // 6.661338e-16
return 0;
}