我正在使用cmake(3.5.0)在Ubuntu 14.04上编译C ++项目,这取决于Nvidia Cudnn。虽然我已经配置了路径,但似乎cmake没有为链接器提供正确的cudnn路径。
文件FindCUDNN.cmake:
function eval(id,correct,set)
print(#set)
end
function evolve(Problem,Set)
local AFitness = eval(A,Problem,Set)
local BFitness = eval(B,Problem,Set)
end
BinarySet={{0,0},{1,0},{0,1},{1,1}}
for i=1, 10 do
evolve(Target,BinarySet)
end
CMakeLists.txt:
FIND_PATH(CUDNN_INCLUDE_DIR NAME "cudnn.h" PATHS "$ENV{CMAKE_INCLUDE_PATH}")
FIND_LIBRARY(CUDNN_LIBRARIES NAME "libcudnn.so" PATHS "$ENV{CMAKE_LIBRARY_PATH}")
INCLUDE(FindPackageHandleStandardArgs)
find_package_handle_standard_args(CUDNN DEFAULT_MSG CUDNN_INCLUDE_DIR CUDNN_LIBRARIES)
MARK_AS_ADVANCED(CUDNN_INCLUDE_DIR CUDNN_LIBRARIES)
FIND_PACKAGE(CUDNN REQUIRED)
LIST(APPEND LINKER_LIBS ${CUDNN_LIBRARIES})
...
ADD_LIBRARY(myobjects OBJECT ${mysources})
ADD_LIBRARY(mylib SHARED $<TARGET_OBJECTS:myobjects> ${cuda_objs})
TARGET_LINK_LIBRARIES(mylib ${LINKER_LIBS})
将导出到我的主文件夹中的cudnn5路径。在CMAKE_INCLUDE_PATH, CMAKE_LIBRARY_PATH
之后,CmakeCache.txt中的路径设置为cudnn5。
但是,链接器(和link.txt)使用cmake ..
而不使用cudnn5的路径。因此,它链接系统文件夹中的cudnn4,即-lcudnn
。
注意:如果我的系统文件夹中没有cudnn4,一切都很好。 link.txt文件和/usr/local/cuda/lib64
的输出在链接期间使用cudnn 5的绝对路径。