我正在尝试学习如何在我的 C++ 项目中实现 OptiX。第一步是获取当前的 CUDA 上下文cuCtxGetCurrent(&some_CUcontext_variable)
,但是我收到一个编译时错误,说我对cuCtxGetCurrent
.
这是我所拥有的:
- 我正在关注此 repo中的代码以了解 OptiX,并且我在示例 2 中(您可以在其中获得 CUDA 上下文)。
- 在我的代码 (
main.cpp
) 中,我包含了cuda_runtime.h
、device_launch_parameters.h
、optix.h
和optix_stubs.h
,但在编译时我仍然收到错误消息。 - 有趣的是,我的 IDE,JetBrains 的 CLion,没有显示任何未定义的参考错误/警告内联。错误仅在我编译时出现。
- 在我的
CMakeLists.txt
,我曾经find_package(CUDAToolkit REQUIRED)
得到 CUDA。然后我用来target_link_libraries{ ... CUDA::cudart}
链接CUDA。
我相信这个错误与链接器有关,所以我假设我在我的 CMakeLists 中遗漏了一些东西,但我不知道是什么。请让我知道如何解决此问题!
提前感谢您的帮助!
更新 #2:已解决
正是这样的时刻让我大吃一惊:我所要做的就是将cuda
我的目标链接库放入其中。不是-lcuda
或CUDA::cuda
,只是cuda
。不知何故,它链接在驱动程序中,现在看起来正在编译。
[旧,但仅供参考] 更新 #1:这是我的CMakeLists.txt
.
抱歉,我的原始帖子中缺少代码。我试图避免粘贴大块任意代码。
cmake_minimum_required(VERSION 3.17)
project(My_Project_Name CUDA CXX)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}/cmake"
${CMAKE_MODULE_PATH})
find_package(CUDAToolkit REQUIRED)
find_package(OptiX REQUIRED VERSION 7.0)
add_executable(
${PROJECT_NAME}
main.cpp [and other cpp and cu files])
# For project
set_target_properties(
${PROJECT_NAME}
PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
)
target_compile_options(
${PROJECT_NAME}
PRIVATE
$<$<COMPILE_LANGUAGE:CUDA>:
-arch=sm_61
-gencode arch=compute_52,code=sm_52>
)
target_include_directories(
${PROJECT_NAME}
PRIVATE
include
${OptiX_INCLUDE}
)
target_link_libraries(
${PROJECT_NAME}
PRIVATE
CUDA::cudart
CUDA::cublas
)