ปัญหา vcvars64.bat กับ NVCCCompiler

เครื่องที่ผมใช้งานลง Windows 7 64 bits พร้อมกับ Visual C++ Express 2010 กับ Windows SDK 7.1 และ NVIDIA SDKs Toolkit แล้วมีปัญหาในการ compile library ใน Mathematica ด้วย CreateLibrary หรือ CreateExecuteable กับ NVCCCompiler ใน Mathematica ซึ่งมันจะขึ้น $Failed

หลังจากที่งมหาคำตอบนี้อยู่นานก็พบว่า ไฟล์ C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat” จะมีการเรียก ไฟล์ C:\Program Files (x86)\Microsoft Visual Studio 10.0\vc\bin\amd64\vcvars64.bat ซึ่งมันไม่ได้ติดตั้งมาด้วยกับตัว compiler ดังนั้นผมเลยสร้างไฟล์ vcvars64.bat มาใหม่โดยใส่บรรทัดนี้ลงไปครับ

CALL “C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd” /x64

จากนั้นก็ลงรันคำสั่งCreateLibrary ด้วยNVCCCompiler  แต่ก็ยังไม่สามารถแก้ปัญหาได้ ยังขึ้น $Failed อยู่ แต่ก็ได้ลองเพิ่ม option  “ShellOutputFunction”->Print ดูเพื่อจะได้รู้ว่ามันเกิดปัญหาอะไร  ซึ่งก็พบว่า Mathematica มีการเรียกใช้ files พวก library จาก folder ของ NVIDIA SDKs Toolkit แต่ดันเรียก nvcc.exe จากตัวของ Mathematica เอง ผมเลย uninstall NVIDIA SDKs Toolkit ออกไป แต่ก็ได้เพิ่มตัวแปร Path ด้วย   C:\Users\SLPHYX\AppData\Roaming\Mathematica\Paclets\Repository\CUDAResources-­Win64-8.0.4.1\CUDAToolkit\bin;  C:\Users\SLPHYX\AppData\Roaming\Mathematica\Paclets\Repository\CUDAResources-­Win64-8.0.4.1\CUDAToolkit\open64\bin

(SLPHYX นี่เป็นชื่อ login ของผมครับ)

หลังจากนั้นก็ปิดแล้วเปิด Mathematica ใหม่ แล้วลองใช้ CreateLibrary กับ NVCCCompiler ก็ปรากกฏว่าใช้ได้แล้ว 🙂