CMake 中 CUDA 库的链接

2023-11-24

我正在使用 CMake 3.10,并且在将已编译的库链接到 CMake 中的测试可执行文件时遇到问题。 我进行了大量搜索,发现在早期版本中存在一个问题,即无法在结果可执行文件中链接中间库。我无法判断这是否已解决或仍然是一个问题。

我的 CMake 文件如下所示:

Algo:

cmake_minimum_required (VERSION 3.9)
project(${MODULE_NAME}_core LANGUAGES CXX CUDA)


add_subdirectory("${core_impl_dir}" implementation)


set(cuda_src "parallel/ParallelComputation.cu")
set(cuda_hdr "parallel/ParallelComputation.h")

add_library(${PROJECT_NAME} STATIC "${cuda_src}" "${cuda_hdr}"
)


target_include_directories (${PROJECT_NAME} PUBLIC "include/" 
"parallel/"
)

source_group("parallel"  FILES "${cuda_src}" "${cuda_hdr}")


set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER ${MODULE_NAME})

Test:

project(${MODULE_NAME}_gtest LANGUAGES CXX CUDA)

add_subdirectory("${gtest_impl_dir}" implementation)

add_executable(${PROJECT_NAME} "${gtest_impl_src}")
target_link_libraries(${PROJECT_NAME} ${MODULE_NAME}_core)

enable_testing()
find_package(GTest REQUIRED)
include_directories("${GTEST_INCLUDE_DIRS}")


target_link_libraries(${PROJECT_NAME} ${GTEST_BOTH_LIBRARIES})

source_group("Implementation\\Source Files" FILES "${gtest_impl_src}" )

set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER ${MODULE_NAME})

add_test(${PROJECT_NAME} ${PROJECT_NAME})

仅构建 Algo 工作正常,但在构建 Test 时,我会遇到链接错误,例如

../implementation/libmatrix1_testCuda_core.a(ParallelComputation.cu.o):在Funktion'cudaError cudaMalloc(float **,unsigned long)'中: tmpxft_00005ad0_00000000-5_ParallelComputation.cudafe1.cpp:(.text+0x4f2):未定义的引用“cudaMalloc”

编辑 使用make VERBOSE=1我得到这个链接命令:

/usr/bin/c++ -Wl,--no-as-needed -pthread -g -std=c++14 -Wall
CMakeFiles/matrix1_testCuda_gtest.dir//tests/eclipseProject/algos/testCuda/test/src/main.cpp.o CMakeFiles/matrix1_testCuda_gtest.dir/cmake_device_link.o -o matrix1_testCuda_gtest ../implementation/libmatrix1_testCuda_core.a /usr/lib/libgtest.a /usr/lib/libgtest_main.a


此答案适用于 CMake 版本

对于 CMake 版本 >= 3.10 但 answer helps.

对于 CMake 3.17+,请检查 VojtaK 的answer.


我通过打电话让这个工作

find_package(CUDA 9.0 REQUIRED)

在两个 CMake 文件中。 另外,在 Algo 文件(包含设备代码)中,我必须这样做

target_link_libraries(${PROJECT_NAME} ${CUDA_LIBRARIES})

我原以为 CUDA 的语言支持将使这些步骤变得不必要,但显然并非如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake 中 CUDA 库的链接 的相关文章

  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 在 omp 并行 for 循环中使用 unique_ptr 会导致 SEG.FAULT

    采取以下代码 include
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • C 中的 CUDA:如何使用 cudaMemcpyAsync 修复错误 11

    我目前正在尝试使用 CUDA 运行一个简单的多 GPU 程序 它的基本作用是将一个包含一些虚拟数据的大型数组复制到 GPU GPU 进行一些数学计算 然后将结果数组复制回来 我在 VS2017 的输出中没有收到任何错误 但我设置的一些错误消
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters

随机推荐

  • 将数据从 Textbox 插入到 Postgresql

    我刚刚学习如何连接 C 和 PostgresQL 我想将 tb1 Textbox 和 tb2 中的数据插入数据库 但我不知道如何编码 我以前的代码是从数据库中选择 这是我的代码 private void button1 Click obje
  • 如何取消 URL 会话请求

    我使用将图像转换为 base64 并将图像作为参数发送到 API 中 将多个图像上传到服务器 但是 当我们一次又一次调用 api 时 如何停止单击按钮时的 api 调用 我正在使用下面的代码来调用 API 提前致谢 let urlPath
  • Windows 上的 QtCreator 使用 CodeSourcery 工具链为 Linux ARM 进行交叉编译

    我在 Windows 7 计算机上安装了 Qt Creator 我的目标是 OMAP3 嵌入式 Linux 板 我下载了目标工具链 Sourcery G Lite for Windows 并安装了 MinGW http www mingw
  • 如何将 npm 与 node.exe 一起使用?

    我已经从 Windows 下载了 Nodejs 的二进制文件 exe 主页 我该如何安装和使用npm 节点包管理器 当前的 Windows 安装程序来自节点js org从 v0 6 11 2012 02 20 开始 NPM 将与 NodeJ
  • C 中混合使用“switch”和“while”

    我最近读过这一页关于奇怪的 C 片段代码 其中大多数是可以理解的 但我无法理解这一点 switch c 3 while c 4 gt 0 foo case 3 foo case 2 foo case 1 foo case 0 谁能帮我看看这
  • 如何在 Oracle 10gR2 和 JPA 中做到不区分大小写和不区分重音?

    在 J2EE 项目中 使用 JPA 如何强制类似查询不区分大小写和重音 我知道更改会话变量 NLS COMP 和 NLS SORT 但我想知道是否还有另一个技巧可以在查询本身中执行此操作 而不更改会话变量 使用 JPA 如何强制类似查询不区
  • 无法对基本类型 double 调用compareTo(double)

    线路return array index1 compareTo array index2 提供了一个错误 无法对基本类型 double 调用compareTo double 如何解决这个问题 This function implements
  • 如何判断DLL是COM还是.NET?

    我有一个更新程序 从服务器提取的文件在一个目录中混合了 vb6 dll 和 net DLL 如何判断一个dll是否是COM dll 所以我可以调用regsvr32从更新程序到它 我想一种方法是尝试使用以下命令加载文件System Refle
  • KornShell 中的正则表达式

    我试图检查一个变量是否恰好是两个数字 但我似乎无法弄清楚 如何在 KornShell ksh 中检查正则表达式 regex 我努力了 if month 0 9 2 if month 0 9 2 我无法找到任何有关它的文档 有什么见解吗 ca
  • 路由器后面的android套接字编程

    我有疑问或问题 我正在尝试在两部 Android 手机之间建立 p2p 连接 我将每部电话连接到我的服务器 并获取它们的私有 192 168 1 1 和公共 76 123 288 22 IP 以及它们连接到我的服务器的端口 当电话连接到服务
  • 使用 IdentityServer4 从多个 API 创建用户

    所以我已经为这个问题苦恼了一段时间了 我们有一个网络应用程序正在使用身份服务器4 and AspNet身份验证和注册用户 这是按预期工作的 此外 我们还有另一个 API 在同一解决方案中 能够使用 IdentityServer4 对访问 A
  • iOS - 在导航栏标题中添加图像和文本

    我想创建一个类似于所附图像中的导航栏 导航栏的标题将是图像和文本的组合 是否应该按照最佳实践来完成此操作 如何做呢 As 这个答案显示 最简单的解决方案是将文本添加到图像中 然后将该图像添加到导航栏 如下所示 var image UIIma
  • 如果用户使用 IE8 浏览则禁用脚本

    如果用户使用 Internet Explorer 8 浏览 我想要一个 javascript 代码来禁用我编写的脚本 尝试这个 用于禁用 IE 8 的脚本 用于禁用 IE 8 及更高版本的脚本
  • 有没有简单的方法可以在没有 site:site 的情况下从 Maven 生成 Findbug HTML 报告?

    我正在尝试将 FindBugs 集成到 Maven 项目中 有人有样品吗pom xml在目标中生成一个简单的 findbug HTML 报告 是否可以生成此报告而无需运行site site Findbugs jar 包含 5 个 XSLT
  • 如何更改导航栏颜色?

    我想要一个半透明的状态栏和一个其他颜色的导航栏 而不是半透明的 如蓝色或白色 My code
  • 如何检查提供的 CSRF 令牌在 Symfony2 中是否无效?

    我创建了一个 Symfony2 表单并将其绑定到请求 在继续处理表单的其余部分之前 我需要明确确保 CSRF 令牌是否有效 无效 form token gt isValid throws OutOfBoundsException消息 Chi
  • 如何解析格式为“Name ”的字符串

    我有一种方法可以接收以下格式之一的联系人 1 电子邮件受保护 2 名称 电子邮件受保护 gt 或 姓名 电子邮件受保护 gt 可以存在空格 如果它是格式 1 我什么也不做 对于 2 我需要解析姓名和电子邮件 我永远不知道我会收到哪种格式的电
  • 无法解析符号 AndroidJUnit4

    我正在尝试为我的应用程序添加登录facebook 但是当我添加执行此操作所需的存储库时 它导致了一个错误 AndroidJUnit4 现在无法解析 示例InstrumentedTest java package com example us
  • Cordova 想要 android-19,我有 android-20

    这里有很多关于运行 cordova add platform android 命令的问题的问题 我已经尝试了每种有目的的解决方案 但没有一个对我有帮助 错误信息 sandbox hello cordova platform add andr
  • CMake 中 CUDA 库的链接

    我正在使用 CMake 3 10 并且在将已编译的库链接到 CMake 中的测试可执行文件时遇到问题 我进行了大量搜索 发现在早期版本中存在一个问题 即无法在结果可执行文件中链接中间库 我无法判断这是否已解决或仍然是一个问题 我的 CMak