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的某个较旧版本。
嗨,在我热情地尝试你的解决方案之前,我想说的是,test.lib只是一个普通的C++库,它非常接近CUDA库,我只是试图向人们展示问题并非如此作为简单... 我会检查现在回来给你 感谢百万!!!! – Adam 2011-03-04 10:08:29
好吧我明白你的意思了,是的,我一直在重命名的东西,试图让这个例子简单和搞砸。 仍在CUDA上工作。将尽快更新! – Adam 2011-03-04 10:12:46
天鹅座你是一个CUDA上帝! (2)在CUDA项目中使用Runtime API (3)在CUDA项目 中执行相同的运行库lib(愚蠢的我)做了诡计! ! – Adam 2011-03-04 10:28:28