2013-03-11 66 views
1

您好我正在使用CAPS OpenACC編譯器,但它似乎編譯器不能將函數鏈接到標準math.h.OpenACC使用math.h庫

實際上,在我的情況下,sqrt函數用在我的代碼中的加速循環中。當我編譯代碼時,下面的錯誤被拋出:

/tmp/cc8L0aKZ.o:compute_fluxes_XrxAnW.translated.i:function _flux_function_central: error: undefined reference to 'sqrt' 

任何人都可以得到一些解決方案?

謝謝!

+0

什麼是您所使用的鏈接代碼的命令?你使用哪種語言和主編譯器? – talonmies 2013-03-11 06:13:11

+0

$ caps capsmc --openacc-target CUDA --io-report -Xnvcc -arch = sm_13 -c --force gcc -std = c99 -L/usr/include/math.h compute_fluxes.c -o cf.13 – YuanZheCSYZ 2013-03-13 10:25:09

+0

代碼在C,gcc中實現 – YuanZheCSYZ 2013-03-13 10:25:57

回答

0

請重試與

caps capsmc --openacc-target CUDA --io-report -Xnvcc -arch=sm_13 -c --force gcc -std=c99 -L/usr/include/math.h **-lm** compute_fluxes.c -o cf.13 

-lm實際上與標準的數學庫鏈接)

1

所有加速器代碼必須使用程序指令來標註。否則,編譯器將不會爲其生成設備代碼。 PGI有一個article解釋如何處理這個問題。

你可以閱讀這篇文章,或只是嘗試添加在你的代碼中的其他頂級聲明如下:

#pragma acc routine(sqrt) seq