Cmake 无法在Windows上使用Xtenor blas

Cmake 无法在Windows上使用Xtenor blas,cmake,blas,openblas,xtensor,Cmake,Blas,Openblas,Xtensor,免责声明:我是building/make/packages/cmake的noob。 我的目标:在C++中使用xtensorblas库 我的环境:Win10 x64,CLion2021 我的问题:无法获得最简单的示例进行编译。关于项目依赖性的信息。 我尝试过:1)使用我能在谷歌上搜索到的每一个教程手动下载和编译openBLAST-总是在遇到不同的问题时停止。要么我没有“nmake”,要么由于某种原因构建失败,要么我得到了“未定义的引用”等等——我已经不知所措好几天了。希望您能一步一步地进行演练。

免责声明:我是building/make/packages/cmake的noob。
我的目标:在C++中使用
xtensorblas

我的环境:Win10 x64,CLion2021
我的问题:无法获得最简单的示例进行编译。关于项目依赖性的信息。
我尝试过:
1)使用我能在谷歌上搜索到的每一个教程手动下载和编译openBLAST-总是在遇到不同的问题时停止。要么我没有“nmake”,要么由于某种原因构建失败,要么我得到了“未定义的引用”等等——我已经不知所措好几天了。希望您能一步一步地进行演练。
2) 我得到的最接近的方法是使用anaconda
conda安装-c conda forge openblas
,然后将
xtl
xtensor
xtensor blas
中的“include”目录复制粘贴到我的项目中。My 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\u
true
。但是,当我编译我的cpp时,在加载共享库时出现
错误:openblas.dll:无法打开共享对象文件:没有这样的文件或目录进程完成,退出代码127

注:
OpenBLAS\u INCLUDE\u DIRS
扩展到
c:/Users/pruglo/anaconda3/envs/evn/Library/INCLUDE/OpenBLAS
OpenBLAS\u库
扩展到
c:/Users/pruglo/anaconda3/envs/evn/Library/bin/OpenBLAS.dll


额外问题

  • 我需要LAPACK或其他东西来安装xtensor blas吗
  • 我是否可以将我的项目构建为可移植的,这样我就不需要为我开发的每台pc安装所有东西

免责声明:我远非Windows专家(我只是在持续集成测试中使用它)

您应该能够使用Xtenor blas提供的目标。因此,我们应该(在任何平台上)做到:

既然你提到了康达,那确实是我发现的最简单的方法,并且可以在所有平台上使用。除此之外,我真的没什么别的事可做

conda install -c conda-forge cmake xtensor xtensor-blas
(在我加载的环境中)

这里可能有一个陷阱:请注意,我使用了康达的CMake。这可能是因为它为conda配置了正确的路径(但老实说,我不确定)

为完整起见,我认为您可以使用(从源目录,在加载conda环境的情况下):

为了独立,我使用文档中的一个示例进行了测试:

#包括
#包括
int main()
{
xarray a={{1,2,3},{4,5,6},{7,8,9};
自动d=xt::linalg::det(a);

std::cout可能dll不在它所查看的位置。可能它是为不同的编译器msvc而不是mingw编译的(我希望您正在使用mingw)。可能您混合了32位和64位。或者我没有msvcI附带的“nmake”。我会尝试msvc(可能使用vcpkg)或者使用MSYS2的mingw我自己也不是一个很好的Windows专家。但是要看看库是如何测试的:,@MichaelPruglo这些文件你不能运行。它们是用来作为参考的,让你看看在连续集成上是如何配置的,让你看看你在配置上是否有重要的不同。CMake文件是这里只是给你一个参考,看看如何在内部完成事情,因为它可能会帮助你调试quickerdidn对我不起作用-尝试重新安装conda并运行命令,尝试cmakelists.txt-从“find_package”中得到错误-添加
set(xtensor_DIR…)
对于
xtl
xtensor
xtensor blas
,现在我在执行
find_包(xtensor blas)

1)什么是“加载的环境”
2)什么是“源目录”?我的项目在哪里?
谢谢您的时间anyway@MichaelPruglo你必须设置路径的事实并不是事情的本来面目,也可能是你找不到blas的原因。基本上,CMake是为你提供链接库而不必处理路径的。这使得它非常强大,你提供了一组依赖项,CMake w我将负责不同平台和不同系统上的路径。因此,您的系统上可能缺少一个关键设置,阻碍了CMake的工作。您确定您正在从conda运行CMake吗?感谢您的光临!坦率地说,我正在失去希望。关于CMake的好消息-我确实使用了IDE捆绑版本。正在转向conda但是,的cmake没有帮助-我发现
找不到BLAS(缺少:BLAS_库)
。我发现一个短语
用于构建测试或实际使用xtensor blas,您将需要openblas lapack的二进制文件,该二进制文件也可在conda forge上获得。
运行了
conda安装
-结果仍然相同。接下来是
.appveyor.yml
文件-它涉及修改文件和安装附加库-仍然如此运气不好。任何指导都将不胜感激。@MichaelPruglo您似乎离此更近了一步。要进行检查,中间的一步是看看您的CMake是否可以找到任何使用conda安装的库。也许您可以尝试一些不需要先链接的东西。例如,您可以先尝试
xtensor
Th恩,如果这样做有效,您应该使用
conda list
检查blas是否确实安装在您的conda环境中。加载的环境是什么(应该是这种情况,因为它们是
xtensor blas
)中间步骤成功-我能够
找到包(xtensor)目标链接库(…xtensor)
。第二步也很成功-
conda list
给了我
…blas 1.0…cmake 3.19.7…conda 4.10.0…libblas 3.8.0…libcblas 3.8.0…liblapack 3.8.0…m2w64 openblas 0.2.19…openblas 0.3.12…
conda install -c conda-forge cmake xtensor xtensor-blas
conda install -c conda-forge ninja
cmake -G "NMake Makefiles" -Bbuild
cd build
nmake