问题1描述:
在使用根据CCMpred 源码提供的CMakeLists.txt 文件进行编译时报了一条关键错误(更详细的请看第二个报错信息)。
Could NOT find CUDA (missing: CUDA_INCLUDE_DIRS) (found version "11.1")
提示我找不到CUDA,但是我又想要安装使用nvcc编译的CCMpred,毕竟在GPU上运行的速度比CPU上快多了。
(base) username@node8:~/workspace/CCMpred$ cmake .
-- MsgPack was not found. Make sure MSGPACK_LIBRARY and MSGPACK_INCLUDE_DIR are set.
-- Could NOT find LibUUID (missing: UUID_LIBRARY UUID_INCLUDE_DIR)
CMake Deprecation Warning at lib/libconjugrad/CMakeLists.txt:11 (cmake_policy):
The OLD behavior for policy CMP0022 will be removed from a future version
of CMake.
The cmake-policies(7) manual explains that the OLD behaviors of all
policies are deprecated and that a policy should be set to OLD only under
specific short-term circumstances. Projects should be ported to the NEW
behavior and not rely on setting a policy to OLD.
-- Could NOT find CUDA (missing: CUDA_INCLUDE_DIRS) (found version "11.1")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jianquanzhao/workspace/CCMpred
原因分析
cmake无法自己找到nvcc的路径,所以需要我们自己进行指定
通过查看
cmake官网关于在计算机上查找CUDA的说明
找到了解决的办法
解决方案
- 在CMakeLists.txt前面几行自己输入你服务器或者是自己电脑上的CUDA-toolkit的安装路径(如代码中的最后一行所示)
cmake_minimum_required (VERSION 3.8)
include(CheckLanguage)
project (CCMpred)
set(CCMPRED_MAJOR_VERSION 0)
set(CCMPRED_MINOR_VERSION 3)
set(CCMPRED_PATCH_VERSION 3)
set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-11.1)
- 如果不需要GPU版本的
那么只需要在使用cmake编译的时候指定参数为
(base) username@node8:~/workspace/CCMpred$ cmake -DWITH_CUDA=OFF .
问题2描述
在cmake 没有报错信息之后,使用make出现错误
(base) username@node8:~/workspace/CCMpred$ make
[ 30%] Built target conjugrad
[ 35%] Building CUDA object CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o
nvcc fatal : Unknown option '-fopenmp'
CMakeFiles/ccmpred.dir/build.make:326: recipe for target 'CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o' failed
make[2]: *** [CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/ccmpred.dir/all' failed
make[1]: *** [CMakeFiles/ccmpred.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2
原因分析
分析不出来
解决方案
参考了这篇csdn文章https://dablelv.blog.csdn.net/article/details/50378209
选择在cmake编译之后的Makefile的前面几行增加
CXX=nvcc
CXXFLAGS=-g -Xcompiler -fopenmp -DDEBUG
问题3描述
在解决了上述两个问题之后又又又又出现问题了(cmake 没有报错了,但是…)
使用make进行项目构建时报错如下
[ 57%] Building C object CMakeFiles/ccmpred.dir/src/evaluate_cpu.c.o
[ 63%] Building C object CMakeFiles/ccmpred.dir/src/parseopt.c.o
[ 68%] Building C object CMakeFiles/ccmpred.dir/src/reweighting.c.o
[ 73%] Building C object CMakeFiles/ccmpred.dir/src/numdif.c.o
[ 78%] Building C object CMakeFiles/ccmpred.dir/src/meta.c.o
[ 84%] Building C object CMakeFiles/ccmpred.dir/src/evaluate_cuda.c.o
[ 89%] Building CUDA object CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o
nvcc fatal : Unknown option '-pthread'
CMakeFiles/ccmpred.dir/build.make:302: recipe for target 'CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o' failed
make[2]: *** [CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/ccmpred.dir/all' failed
make[1]: *** [CMakeFiles/ccmpred.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2
原因分析
通过查找最终在StackOverflow找到了解释链接
其实就是cmake版本太低导致的
解决方案
- 确定一下是不是这个原因
(AF2) username@hostname:~/download/CCMpred$ cmake --version
cmake version 3.10.2
高兴哭了,真的是
- 安装cmake(装都装了,必须装最新版的,大家需要自行找适合自己的版本)
(AF2) username@hostname:~/download$ wget https://github.com/Kitware/CMake/releases/download/v3.22.3/cmake-3.22.3.tar.gz
(AF2) username@hostname:~/download$ tar -xf cmake-3.22.3.tar.gz
(AF2) username@hostname:~/download$ cd cmake-3.22.3/
(AF2) username@hostname:~/download/cmake-3.22.3$ ./bootstrap
(AF2) username@hostname:~/download/cmake-3.22.3$ make
然后使用cmake的时候使用当前路径下的bin/cmake就好了,不要再使用默然路径中的cmake了(针对服务器,如果是本地的话,可以考虑直接把默认路径中的cmake更换成新装的这个)
- 妥了