我正在使用nVidia的CUDA C进行编程。我使用Visual Studio 2008作为开发环境,但在链接时遇到了一些麻烦。请问是否有人知道如何解决这个问题或者曾经遇到过同样的问题并能够提供解决方案。
我的程序由3个文件组成。一个头文件(stuff.h),一个C源文件(stuff.c)和一个CUDA C文件(main.cu)。现在,stuff.h/stuff.c定义/实现了一些辅助函数,我从main.cu中调用这些函数。
我正在使用Visual Studio 2008和nVidia的GPU Computing SDK中的Cuda.rules,所有内容都可以编译通过,但是当将所有文件链接在一起时,它失败了。似乎所有在stuff.h中定义(并在stuff.c中实现)的函数都没有正确地链接在一起,因为它们被标记为“未解析的外部符号”。
可能的原因是什么?我该如何解决这个问题?
好的,我已经成功将所有内容编译了。看起来我所需要做的就是将stuff实现文件的扩展名从.c更改为.cpp(这意味着编译为C++可以工作,而编译为C则不行!)。
这可能是什么原因?我宁愿将所有内容保留为.c而不是.cpp(因为这确实是C代码...)。
有什么建议吗?
我的程序由3个文件组成。一个头文件(stuff.h),一个C源文件(stuff.c)和一个CUDA C文件(main.cu)。现在,stuff.h/stuff.c定义/实现了一些辅助函数,我从main.cu中调用这些函数。
我正在使用Visual Studio 2008和nVidia的GPU Computing SDK中的Cuda.rules,所有内容都可以编译通过,但是当将所有文件链接在一起时,它失败了。似乎所有在stuff.h中定义(并在stuff.c中实现)的函数都没有正确地链接在一起,因为它们被标记为“未解析的外部符号”。
可能的原因是什么?我该如何解决这个问题?
好的,我已经成功将所有内容编译了。看起来我所需要做的就是将stuff实现文件的扩展名从.c更改为.cpp(这意味着编译为C++可以工作,而编译为C则不行!)。
这可能是什么原因?我宁愿将所有内容保留为.c而不是.cpp(因为这确实是C代码...)。
有什么建议吗?
--host-compilation=c
选项,但请注意这篇文章中的注意事项:http://forums.nvidia.com/index.php?showtopic=101609。通常我更喜欢将我的`main`函数和其他所有内容放在标准的C/C++文件中,然后只在CU文件中放置内核和包装器。许多Thrust的东西也需要放到CU文件中... - Tom