2010-07-01 75 views
1

我正在編譯使用Intel編譯器(ifort)編寫的Fortran編寫的大型HPC系統。大約有幾百個獨立的模塊,他們都編譯罰款,但鏈接拋出了這個錯誤:ifort linker undefined reference

phys_grid.o(.text+0x91b2): In function `phys_grid_mp_assign_chunks_': 
: undefined reference to `_mm_idivrem_epi32' 

_mm_idivrem_epi32似乎是編譯器的自動向量化的結果,但如果編譯器產生的,爲什麼我我得到這個錯誤?我需要鏈接一些額外的圖書館嗎?

更新:

使用nm,我能夠追蹤功能libsvml但與鏈接沒有幫助。現在,這裏似乎在於問題:ia32intrin.h聲明函數如下:

__m128i __cdecl _mm_idivrem_epi32(__m128i * r, __m128i v1, __m128i v2); //__svml_idivrem4 

但從nm的輸出,在庫中的符號爲__svml_idivrem4。根據頭文件,這些是相同的功能,但我可以告訴鏈接器?

回答

0

我的猜測是有問題的源文件(phys_grid.f90?)沒有implicit none語句。如果沒有這些,ifort會假設必須有一個匹配該配置文件的例程,然後將其快速編譯並交給鏈接器進行解析。

當然,你的下一個工作就是尋找那個缺少的例程的代碼,或者找出WTH它的代碼,以便你可以重寫它。

1

求助於谷歌指出我到一個文件中,在我的Mac:

/Developer/opt/intel/Compiler/11.1/080/include/ia32intrin.h 

其中包含一個符號

_mm_idivrem_epi32 

所以它看起來的聲明,如果你缺少一個聯動或包括。

+0

我沒有它,但我運行版本9.1,它看起來像你有11.1。卡薩布蘭卡,你正在運行什麼版本的編譯器? – 2010-07-01 18:29:51

+0

我正在使用版本11.1。事實上,Mark提到的頭文件包含了_mm_idivrem_epi32的聲明,但我仍然試圖弄清楚我需要鏈接哪個庫。 – casablanca 2010-07-01 18:39:39