2016-10-20 22 views
0

我安裝了VS 2015專業版。我安裝了最新的HYPRE,來自Lawrence Livermore website。然後我配置它使用CMake和着手建立,和我開始BLAS(dnrm2.c)構建錯誤:HYPRE建造錯誤與VS 2015

2>   dnrm2.c 
2>  1> 
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\math.h(454): error C2059: syntax error: '(' 

的代碼觸發錯誤dnrm2.c的行是:

#include "math.h" 

指向文件:

c:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\math.h 

我擡頭一看這個錯誤,並發現了一些建議,如this改變包括對:

#include <cmath> 

和編輯在HYPRE項目設置:Configuration > C/C++ > Advanced > Compile AsCompile As C++ (/TP)

,我做到了,但我還是看到同樣的錯誤,因爲這顯然是爲了math.h相同的標題路徑從cmath包括在內:

#else /* _STD_USING */ 
#include <math.h> 
#endif /* _STD_USING */ 

我甚至嘗試重新安裝VS 2015沒有任何運氣(相同的錯誤)。欣賞關於這裏發生的事情的任何想法,以及如何解決這個問題。我想我可以在VS 2015中嘗試一個簡單的例子,包括math.h和報告,如果有幫助的話。

編輯 我極簡例如:

#include "math.h" 

int main() { 
    double d1 = sqrt(4.0); 
    float d2 = abs(4.0); 
    return 0; 
} 

似乎建築物確定。我試圖設置項目與編譯爲C(或C++,無所謂)相同的方式。但這並不能真正幫助我。

+0

_I我想我可以在VS 2015中嘗試一個極簡主義的例子,其中包括math.h和報告,如果這有助於_:是的,這會明確地幫助。 –

+0

@MichaelWalz:我編輯帖子以包含極簡主義的例子..它構建成OK。所以看起來像我的VS 2015安裝是好的,問題是HYPRE ..但它可能是什麼? –

回答

0

好的,這裏的問題與HYPRE源代碼看起來是一樣的。他們有這包括包括math.h前一個文件f2c.h

//#undef abs 
//#define abs(x) ((x) >= 0 ? (x) : -(x)) 
//#endif 

當我評論出來(因爲這已經在標準中定義),那麼它會過去那種建立自己的錯誤。當然,我遇到了其他構建錯誤。我試圖分開處理這些問題。

編輯:它不那麼簡單,因爲他們(HYPRE)實際上依靠他們自己的定義abs。所以我撤消了上面的內容,改變了一些包含的順序,以便undef實際上有意義。無論哪種方式,這是一個HYPRE源代碼問題。

0

如果您在VS2015上成功編譯HYPRE,您可以將您的VS2015程序發送給我! 我的專業是地球物理建模和反演。 我的郵箱是[email protected] 非常感謝!

+0

我在下面描述了我的解決方案。讓我知道如果這不能幫助你弄清楚。我不得不做出一些艱苦的改變。 –

0

我剛剛在

c:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\math.h 

評論

_Check_return_ int  __cdecl abs(_In_ int _X); 

,然後HYPRE被成功編譯!

然後,我已取消註釋「abs」。