使用icc链接到gsl时的intel_sse2问题

时间:2012-06-04 23:13:46

标签: linker shared-libraries gsl icc

我的程序链接到PETSc和gsl,两个库都是用icc编译的。这是链接命令:

/usr/local/mpich2/bin/mpicc -Wall -Wwrite-strings -Wno-strict-aliasing -Wno-unknown-pragmas -g3 -I/usr/local/gsl-icc-1.15/include/ -I/usr/local/gsl-icc-1.15/include/ -L/usr/local/gsl-icc-1.15/lib/ -lgsl -lgslcblas prog_name.o -L/usr/local/petsc-3.2-p6/lib  -lpetsc -lX11 -lpthread -llapack -lblas -L/central/intel/Compiler-11.1.072/mkl/lib/em64t -L/central/intel/Compiler-11.1.072/lib/intel64 -L/central/intel/Compiler-11.1.072/tbb/intel64/cc3.4.3_libc2.3.4_kernel2.6.9/lib -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2 -ldl -lgcc_s -lifport -lifcore -limf -lsvml -lm -lipgo -lirc -lpthread -lirc_s -lm -lstdc++ -lstdc++ -ldl -lgcc_s -ldl  -o prog_name

MPICH_CC设置为icc,因此mpicc调用intel编译器。

当我尝试链接到gsl .so文件时,出现以下错误:

gsl-icc-1.15/lib/libgsl.so: undefined reference to `__intel_sse2_strcpy'
gsl-icc-1.15/lib/libgsl.so: undefined reference to `__intel_sse2_strchr'
gsl-icc-1.15/lib/libgsl.so: undefined reference to `__intel_sse2_strncpy'

导致此错误的原因是什么? gsl与intel编译器不兼容吗?

3 个答案:

答案 0 :(得分:1)

  

导致此错误的原因是什么?

您没有向我们展示您的链接命令,但我的结晶球告诉我您正在尝试将libgsl.sold(或可能与gcc)相关联,而不是{ {1}}。

通常,不应该在UNIX上直接与icc链接任何内容。始终使用适当的编译器驱动程序(在这种情况下为ld)。

答案 1 :(得分:1)

在将一些代码与gcc链接到使用icc编译的PETSc版本时,我也得到相同的错误消息。更重要的是,当使用最新的Intel 12.x编译器作为最终代码,并使用Intel 11.x编译PETSc时会产生与Intel 12.x使用11.x相同的错误消息。

请检查,mpicc确实使用了Intel 11.1.072编译器。检查mpic++ -showwhich icc

答案 2 :(得分:0)

也许未设置英特尔环境。 尝试以下环境设置:

source /etc/Intel_Compiler/10.0/XXXX/iccvars_intel64.sh
source /etc/Intel_Compiler/10.0/XXXX/ifortvars_intel64.sh

将该文件夹放入您的Intel Compiler文件夹。某些版本的环境设置不同,您也可以尝试:

source /etc/Intel_Compiler/10.0/XXXX/iccvars.sh intel64
source /etc/Intel_Compiler/10.0/XXXX/ifortvars.sh intel64

希望有帮助。