解决 ChatGLM.CPP+clBlast 编译错误(也适用于SD.CPP)

简介: 解决 ChatGLM.CPP+clBlast 编译错误(也适用于SD.CPP)

首先安装 OpenCL 和 clblast:

vcpkg install opencl clblast

下载GitHub 上的源码:

git clone --recurse-submodules https://github.com/li-plus/chatglm.cpp
cd chatglm.cpp

这个项目 GGML 子仓库中, third_party/ggml/src/CMakeList.txt 有个错误。打开并找到 178-183 行:

find_path(CLBLAST_INC NAMES cblast.h PATHS ${CLBLAST_INCLUDE_SEARCH_PATHS})
  find_library(CLBLAST_LIB NAMES clblast)
  if (CLBLAST_LIB)
    message(STATUS "clBLAST found")
    set(GGML_EXTRA_LIBS  ${GGML_EXTRA_LIBS}  ${CLBLAST_LIB})

可以看到头文件名称写错(应该是clblast.h)。然后没有添加CLBLAST_INC到总的包含路径里面。并且 clBlast 一来 OpenCL,也没有添加 OpenCL 的静态库,会导致找不到各种clxxxx函数。

改成:

find_path(CLBLAST_INC NAMES clblast.h PATHS ${CLBLAST_INCLUDE_SEARCH_PATHS})
  find_library(CLBLAST_LIB NAMES clblast)
  find_library(OPENCL_LIB NAMES OpenCL)
  if (CLBLAST_LIB AND OPENCL_LIB AND CLBLAST_INC)
    message(STATUS "clBLAST found")
    set(GGML_EXTRA_INCS  ${GGML_EXTRA_INCS}  ${CLBLAST_INC})
    set(GGML_EXTRA_LIBS  ${GGML_EXTRA_LIBS}  ${CLBLAST_LIB}  ${OPENCL_LIB})

然后执行 CMake 命令:

cmake -B build -DGGML_CLBLAST=ON
cmake --build build -j --config Release

如果还是出现【clblast not found】,说明 CMake 并没有找到 VCPKG 安装的库文件。需要手动指定:

cmake -B build -DGGML_CLBLAST=ON -DCMAKE_PREFIX_PATH="<cmake_lib_path>;<cmake_inc_path>"

<cmake_lib_path><cmake_inc_path>换成 VCPKG 的存储路径,我的开发环境中大概是c:/vcpkg/installed/x64-windows/libc:/vcpkg/installed/x64-windows/include

相关文章
|
3月前
|
C++
如何在C++中实现cpp文件中引用另外一个cpp文件
如何在C++中实现cpp文件中引用另外一个cpp文件
412 0
CPP2022-10-函数01(下)
CPP2022-10-函数01(下)
36 0
|
C++
一个简单的CPP处理框架
下面分享一段代码,是用CPP做的一个简单的消息(协议)处理框架,是通过成员函数指针+map来实现的。
90 0
|
C++ iOS开发
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
768 0
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
|
并行计算 异构计算
错误:customWinogradConvActLayer.cpp
错误:customWinogradConvActLayer.cpp
69 0
|
并行计算 C++
错误解决:src/cpp/cuda.hpp:  fatal error: cuda.h
错误解决:src/cpp/cuda.hpp:  fatal error: cuda.h
109 0