CUDA&Visual Studio 2008:尝试链接不同项目时的问题

CUDA&Visual Studio 2008:尝试链接不同项目时的问题

问题描述:

在为网络问题找到答案时,我看到了多个论坛和博客文章,讨论如何设置,编译,链接和运行CUDA在Visual Studio 2008' 项目CUDA&Visual Studio 2008:尝试链接不同项目时的问题

(我想给的链接,但我不能,作为一个新的海报:p)

但缺少什么吗?

缺少的是,所有上述指南或帖子告诉你如何设置一个VS项目,这将是启动项目,并将自行运行。因此,他们正在使用“CUDA运行时API规则”来定制创建CUDA友好的.exe文件。

我想要什么?

1)我想要一个VS解决方案,它将包含多个项目,其中大部分都是用C++编写的。将会有一个使用C++编写的主项目,创建'.exe'(包含'main'函数并因此控制流程)以及多个其他项目,这些项目将创建主项目将链接的适当'.lib'文件。 2)最简单的形式,我需要一个项目,将做CUDA的东西,这将创建lib文件和主要项目,将链接到它并使用它。

我到处都找不着,没有人似乎使用多个项目。

我的问题是: 1)CUDA项目创建了一个lib,因此必须使用“CUDA驱动程序API规则”,而不是运行时的变体(如果我敢这样做,则CUDA项目尝试使用使用的库由主要的一个和有多个定义的项目' 2)当试图做到这一点正确的方式主要项目无法链接到CUDA项目

这里是我用来显示交易是什么样的代码我也会附上VS sln档案给那些想要试用的人)

Outline: 
    VS Solution 
     Main Project(C++ project producing the .exe and containing the main function) 
      main.cpp 

       #include "../CUDAProject/testCuda.h" 

       int 
       main(int argc, char** argv) 
       { 

        testCudaClass* t2; 
        t2 = new testCudaClass(); 
        t2->stub_function(); 

        return 0; 
       } 

     CUDA Project: 
      testCuda.h 

       #include <cstdio> 
       #include <cstdlib> 
       #include <iostream> 

       class testCudaClass 
       { 
       public: 
        void stub_function(); 
       }; 

      testCuda.cpp 

       #include "testCuda.h" 
       extern "C" int cuda_function(); 

       void testCudaClass::stub_function() 
       { 
        int a; 
        a=cuda_function(); 
        std::cout<< a <<"\n"; 
       } 

      test.cu 

       #include "cuda.h" 

       extern "C" int cuda_function() 
       { 
        return 5; 
       }   

附件(临时保管箱公共链接)是一个带有2个VS2008解决方案的zip文件,其中有一个CUDA项目可以正常工作,其中一个我尝试执行上述操作(部分项目代码概述如上)

http://dl.dropbox.com/u/3091507/CUDA.zip

我会非常感激的任何信息或建议,可以帮助我解决这个难题

非常感谢 亚当

I C hecked你的代码,这是我做的,以成功地编译并运行它:

  • 二手CUDA运行时API(这是确定要使用它,即使你有多个项目)

  • MainProject - >配置属性 - >链接器 - >常规 - >其他库目录:添加到CUDA库的路径(它是CUDA安装路径的子文件夹之一)

  • MainProject - > Configuration Properties - > Linker - > Input - > Additional Dependencies :加入“cudart.lib”

  • MainProject - >配置属性 - >链接器 - >输入 - >忽略特定库:添加“LIBCMT”以删除有关冲突的警告。

  • 确保您对普通的.cpp和.cu使用相同的“运行时库”。在你的情况下,它不匹配,它似乎是警告abount库不兼容的原因。比较值:

    • C/C++ - >代码生成 - >运行时库

    • CUDA运行时API - >主机 - >运行时库

而且,您正在生成“testCppProject.lib”和“CUDAProject.lib”,但是您包含“test.lib”&“CUDAProject.lib”,其中第一个是lib的某个较旧版本。

+0

嗨,在我热情地尝试你的解决方案之前,我想说的是,test.lib只是一个普通的C++库,它非常接近CUDA库,我只是试图向人们展示问题并非如此作为简单... 我会检查现在回来给你 感谢百万!!!! – Adam 2011-03-04 10:08:29

+0

好吧我明白你的意思了,是的,我一直在重命名的东西,试图让这个例子简单和搞砸。 仍在CUDA上工作。将尽快更新! – Adam 2011-03-04 10:12:46

+0

天鹅座你是一个CUDA上帝! (2)在CUDA项目中使用Runtime API (3)在CUDA项目 中执行相同的运行库lib(愚蠢的我)做了诡计! ! – Adam 2011-03-04 10:28:28