星期六, 5月 09, 2015

CUDA:Can not find cutil32D.lib ...

Problem :  SDK (e.g. OpenCV, OptiX) 和本機 CUDA  32 bits or 64 bits 間選用了不同平台.

Solution 

step 1 :重新編譯適當平台的 cutil library.  位在 
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\CUDALibraries\common\ 

step 2 : 將不同平台產生的 cutil32D.lib/cutil64D.lib 加入 linker   
Linker -> General -> Additional Library Directories 

由於 step 1 不同平台的 library 會置於不同 path, 將有平台變數的 path

  
 $(NVSDKCOMPUTE_ROOT)\C\common\lib\$(PlatformName)
   $(NVSDKCOMPUTE_ROOT)\shared\lib\$(PlatformName)
加入 Linker -> General -> Additional Library Dire

p.s. 
 win7 找環境變數 …
電腦 -> 變更設定 -> 系統內容 -> 環境變數
NVSDKCOMPUTE_ROOT=C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1

Step 3 : 如果不幸地出現因 cutil 引起的 error lnk2005 … already define in LIBCMTD.lib
        [Debug/Win32]
        1.  C++ 改用 /MTd 編譯
                C/C++ -> Code Generation change the Runtime Library to/MTd        2.  忽略 LIBCMT.lib
                Linker->Input->Ignore Specific Library to  libcmt.lib
        3.   CUDA 的 Host code (CPU code) 也以  /MTd 編譯                        CUDA Runtime API -> Host -> Runtime Library => /MTd

                [Release/Win32]
                1.  C++ 改用 /MT 編譯
                        C/C++ -> Code Generation change the Runtime Library to /MT
                2.  忽略 LIBCMTD.lib
                        Linker->Input->Ignore Specific Library to  libcmtd.lib 
                3.   CUDA 的 Host code (CPU code) 也以  /MT 編譯                       CUDA Runtime API -> Host -> Runtime Library => /MTd 
             

        p.s
. 曾經同時忽略 libcmt.lib 和 libcmtd.lib, 反而出現更多 error lnk2005 ! 

Reference link

沒有留言: