2011-03-04 86 views
1

在爲網絡問題找到答案時,我看到了多個論壇和博客文章,討論如何設置,編譯,鏈接和運行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

我會非常感激的任何信息或建議,可以幫助我解決這個難題

非常感謝 亞當

回答

1

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