簡體   English   中英

使用icpc進行編譯-使用庫

[英]Compiling with icpc - using libraries

我正在嘗試編譯包含庫的代碼

在代碼中,我有以下幾行:

int main()
{
    clock_t begin = clock();
    random_device rd;
    mt19937 gen(rd());
    uniform_real_distribution<> U(0,1);
    default_random_engine generator;
    rr1=U(gen); 
}

當我使用以下行進行編譯時:

 icpc  -std=c++0x -std=c++11 -o main main.cpp -O3

我收到以下錯誤:

main.cpp(152):錯誤:標識符“ uniform_real_distribution”是未定義的Uniform_real_distribution <> U(0,1); ^

main.cpp(152):錯誤:預期一個表達式Uniform_real_distribution <> U(0,1); ^

main.cpp(368):錯誤:標識符“ default_random_engine”是未定義的default_random_engine生成器; ^

main.cpp(441):錯誤:標識符“ U”未定義rr1 = U(gen); //時間間隔的第一個隨機數

main.cpp(509):警告#1595:通過省略號rr1 = U(gen)傳遞的非POD(普通舊數據)類類型;

任何想法如何解決這個問題?

此問題是由您的英特爾編譯器icpc版本不完全支持c ++ 11(實際上是c ++ 0x)引起的。

這意味着:

  • 您需要更新您的英特爾編譯器以支持uniform_real_distribution
  • 或使用諸如boostPCG等的庫。
  • 或仍使用c ++ 11的方式,但沒有統一的_real_distribution。 例如,直接使用mt19937mt19937_64或任何其他偽隨機數生成器。
  • 或使用非c ++ 11方式,即rand()或rand_r()進行非認真使用。

我想以上部分回答了您的問題。


想知道更多?

對於英特爾用戶,您可以先檢查編譯器的兼容性,然后將icc的版本號轉換為相對相同的gcc的版本號,然后從c ++ 0x / c ++ 11支持的列表中進行檢查。

對於GNU用戶,您可以直接從c ++ 0x / c ++ 11支持的列表中檢查編譯器的兼容性。

例如,您可以$icpc -v您可能會得到類似icpc version abc (gcc version xyz compatibility)這意味着您的Inter編譯器版本為abc,其兼容性為gcc版本xyz

而且由於在GCC 4.4.5之前支持uniform_real_distribution (已驗證GCC 4.4.7支持)

然后,如果您的xyz晚於4.4.5?(肯定是4.4.7),則可以使用“ uniform_xxx_distribution”函數族,而不會出現兼容性問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM