尝试同时编译多个 CUDA 文件时出现链接错误 LNK2005

2023-12-28

我有一个 CUDA 程序,可以正常工作,但目前全部写在一个文件中。我想将这个大文件分成几个较小的文件,以便更容易维护和导航。

新的结构是:

foo.cuh
foo.cu
bar.cuh
bar.cu
main.cu

The .cuh头文件包含结构体和函数原型,并且.cu文件包含函数定义(像往常一样)。主要文件包括bar.cuh, and bar.cu包括foo.cuh。所有.cu 文件都包含cutil_inline.h,以便能够使用CUDA 函数。

Hence :

// main.cu
#include "bar.cuh"
#include <cutil_inline.h>

int main() [...]

// bar.cu
#include "bar.cuh"
#include "foo.cuh"
#include <cutil_inline.h>

[...]

// foo.cu
#include "foo.cuh"
#include <cutil_inline.h>

[...]

问题是,当我使用这个新结构编译 Visual Studio 2008 项目时,我收到大量链接错误:

error LNK2005: "void __cdecl __cutilBankChecker(unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,char *,int,char *,int)" (?__cutilBankChecker@@YAXIIIIIIPADH0H@Z) already defined in cuda_generated_foo.cu.obj cuda_generated_bar.cu.obj
error LNK2005: "void __cdecl __cutilCondition(int,char *,int)" (?__cutilCondition@@YAXHPADH@Z) already defined in cuda_generated_foo.cu.obj cuda_generated_bar.cu.obj
error LNK2005: "void __cdecl __cutilExit(int,char * *)" (?__cutilExit@@YAXHPAPAD@Z) already defined in cuda_generated_foo.cu.obj    cuda_generated_bar.cu.obj
error LNK2005: "int __cdecl cutGetMaxGflopsDeviceId(void)" (?cutGetMaxGflopsDeviceId@@YAHXZ) already defined in cuda_generated_foo.cu.obj   cuda_generated_bar.cu.obj
error LNK2005: "void __cdecl __cudaSafeCallNoSync(enum cudaError,char const *,int)" (?__cudaSafeCallNoSync@@YAXW4cudaError@@PBDH@Z) already defined in cuda_generated_foo.cu.obj    cuda_generated_bar.cu.obj
error LNK2005: "void __cdecl __cudaSafeCall(enum cudaError,char const *,int)" (?__cudaSafeCall@@YAXW4cudaError@@PBDH@Z) already defined in cuda_generated_foo.cu.obj    cuda_generated_bar.cu.obj
error LNK2005: "void __cdecl __cudaSafeThreadSync(char const *,int)" (?__cudaSafeThreadSync@@YAXPBDH@Z) already defined in cuda_generated_foo.cu.obj    cuda_generated_bar.cu.obj
error LNK2005: "void __cdecl __cufftSafeCall(enum cufftResult_t,char const *,int)" (?__cufftSafeCall@@YAXW4cufftResult_t@@PBDH@Z) already defined in cuda_generated_foo.cu.obj  cuda_generated_bar.cu.obj

我理解它们的含义(所有已定义的符号都是 cutil_inline.h 的一部分),但我必须在所有文件中包含此标头,否则它无法编译。我究竟做错了什么 ?

更新:澄清情况: * 所有代码都在一个大文件中,它可以正常编译、链接和运行 * 使用新结构(几个较小的文件)并在所有 .cu 文件中包含 cutil_inline.h,它可以正确编译,但在链接期间失败 * 使用新结构并仅在主文件中包含 cutil_inline.h ,它在编译期间失败,表示在未包含 cutil_inline.h 的文件中 cutil 函数未知(如预期,但我必须尝试一切) - 项目清单


我的程序中也出现了这个错误。我通过添加关键字解决了这个问题inline before __global__ or __device__。然后,错误就消失了。

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

尝试同时编译多个 CUDA 文件时出现链接错误 LNK2005 的相关文章

随机推荐

  • 在函数外部访问函数变量?

    我是初学者 这是我正在上的课程 我知道关于return 但它不允许我在这段代码中做我想做的事情 这是包含变量的函数 def disp cookies This stuff is just for a print display inx 0
  • 在运行时动态修改符号表(C语言)

    是否可以在C运行时动态修改符号表 Linux上的elf格式 我的最终目标如下 在某些函数里面说foo 我想覆盖malloc函数到我的自定义处理程序my malloc 但在外面foo any malloc仍应像 glibc 中那样调用 mal
  • 系统时间与 apache 时间戳不同--?

    我在开发服务器上 当我在 php 中执行此操作时 echo date r time 回复 2010 年 6 月 1 日 星期二 18 10 32 0400 但是 我的计算机时间是 17 10 32 即时时间为 GMT 5 我在哪里配置 ap
  • 是否可以仅更改文本阴影的颜色?

    我有 9 个不同颜色的按钮 红色 橙色 黄色 绿色 蓝色 紫色 粉色 灰白色和石板色 我想知道是否可以仅操纵和更改按钮的颜色text shadow这些按钮的 CSS 属性 同时保持其他值相同 例如 我有两个不同的班级 一个用于 11px 字
  • pandas 返回未命名的列

    以下是我在 Excel 工作表中的数据示例 A B C 1 2 3 4 5 6 我正在尝试使用以下代码获取列名称 p1 list df1t columns values 输出是这样的 A B C Unnamed 3 unnamed 4 un
  • 如何打印包含值的列

    假设我有一个包含以下内容的数据文件 1 2 3 4 5 67 88 12 32 22 9 99 34 59 86 17 0 78 0 77 11 0 0 0 43 我想要一个在每一列中搜索数字 0 的代码 如果找到数字 0 代码将在单独的文
  • 如何使 XmlnsDefinition 在本地程序集上工作?

    我开始使用 XmlnsDefinition 属性将一些 CLR 命名空间绑定到单个 xmlns 中 以便在 XAML 中使用 不幸的是 这似乎只在使用外部程序集时才有效 如果我在与我从 XmlnsDefinition 引用的命名空间中的类型
  • 似乎无法使用 Expo 的 Font.loadAsync 加载自定义字体

    我正在将 React Native 与 Expo 结合使用 除了自定义字体的问题之外 一切都很顺利 我有我的字体Lobster Regular ttf在 assets fonts 中 我一直在尝试加载它 如官方文档中所示 component
  • Android 风格微调器

    我正在努力让我的 Android 应用程序变得更时尚 并取得了一些进展 但旋转下拉菜单给我带来了麻烦 我有一个屏幕截图来向您展示问题 我想要的是背景中的白色框是透明的 就像在后屏幕上与下拉菜单之外的屏幕其余部分一样的灰色覆盖层中 如果我没记
  • kubernetes cronjob 并更新秘密

    下面是我的 python 脚本 用于更新密钥 以便我可以使用 kubectl 部署到 kubernetes 所以它工作得很好 但我想创建一个 kubernetes cron 作业 它将运行 docker 容器来更新 kubernetes 集
  • 无法在 Javadoc 注释中链接到 JDK10

    从 Java 9 升级到 10 后 使用 Javadoc 工具生成文档时 例如 对于导入文件 指向 JDK 的链接不再起作用java util Optional link Optional 呈现为Optional而不是作为Optional
  • 带有layout_width=matchparent 的TableLayout 不匹配父级

    我有一个包含两列和两行的 tableLayout 两行和最后一列的宽度都有 match parent 但布局没有填充父宽度 它的表现就像有 wrap content 一样 这是代码
  • Keras + TensorFlow:“模块‘tensorflow’没有属性‘merge_all_summaries’”

    非常类似于Keras tensorflow 给出错误 no attribute control flow ops https stackoverflow com questions 40046619 keras tensorflow giv
  • 如何扩展文本区域以垂直和水平适应文本?

    我怎样才能使用 html css 和 jquery 来做这样的事情 我发现这个问题根据内容长度调整文本区域大小 https stackoverflow com questions 995168 textarea to resize base
  • getMapAsync 错误 - Google 地图 api android

    因此 我尝试从 Json 文件在地图上显示标记 但它们没有出现 我已将其范围缩小到该行 map mapFragment getMapAsync this 它给了我错误 不兼容的类型 必需 com google android gms map
  • 在 Mac OS X 上使用 PCL(点云库)生成项目

    我按照其建议安装了所有依赖项和预编译的 PCL 库site http pointclouds org downloads macosx html 安装完所有内容后 我想生成一个项目如下this http pointclouds org do
  • GAE开发服务器重启后保留全文搜索索引吗?

    是否有办法强制 GAE 开发服务器在重新启动后保留全文搜索索引 我发现每当开发服务器重新启动时索引都会丢失 当我启动开发服务器时 我已经在使用静态数据存储路径 datastore path选项 此功能是在几个版本之前添加的 我认为是在 1
  • 我的项目在 IntelliJ IDEA 中的文件夹层次结构有什么问题吗?

    今天 当我打开我的项目时 我的文件夹层次结构出现了一些问题 您可以看到下面的内容 这里没有包 一般来说 公共文件夹层次结构应该是这样的 EDIT 我尝试重新打开该项目并重新打开我的 IntelliJ IDEA 两者都不起作用 Delete
  • 将坐标转换为城市名称?

    如何使用 MapKit 从坐标获取地址 我有这个代码 当长按地图时它会获取坐标 func didLongPressMap sender UILongPressGestureRecognizer if sender state UIGestu
  • 尝试同时编译多个 CUDA 文件时出现链接错误 LNK2005

    我有一个 CUDA 程序 可以正常工作 但目前全部写在一个文件中 我想将这个大文件分成几个较小的文件 以便更容易维护和导航 新的结构是 foo cuh foo cu bar cuh bar cu main cu The cuh头文件包含结构