2016-02-28 90 views
0

該程序可以在Windows上成功構建 - Visual Studio 12,但在Linux上編譯時遇到了一些問題。Linux上的CUDA編譯錯誤,但Windows Visual Studio成功

編譯命令:nvcc main.cu

int main(int argc, char **argv) { 

    ... (Skip some code) 

    // Read file. 
    MemoryBuffer<char> text(size + 1); // size type is size_t 
    auto text_smem = text.CreateSync(size); 
    fread(text_smem.get_cpu_wo(), 1, size, fp); 

    ... (Skip some code) 

} 

編譯錯誤消息:

  1. auto text_smem = text.CreateSync(size);

    發生約error: explicit type is missing ("int" assumed)error: no suitable conversion function from "SyncedMemory<char>" to "int" exists

  2. fread(text_smem.get_cpu_wo(), 1, size, fp);

    發生約error: expression must have class type

如何在Linux操作系統解決了編譯器錯誤?


MemoryBuffer是一個類,詳細代碼可以從here看到。

回答

2

這取決於您已安裝的CUDA Toolkit版本,但我想您可以嘗試使用--std=c++11選項到nvcc,以明確啓用現代C++功能。

Reffering到https://devblogs.nvidia.com/parallelforall/power-cpp11-cuda-7/

爲了使C++ 11的支持,通過標誌--std=c++11nvcc(不需要爲Microsoft Visual Studio這個 選項)。