Linker 使用icc链接到gsl时出现intel_sse2问题

Linker 使用icc链接到gsl时出现intel_sse2问题,linker,shared-libraries,gsl,icc,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 -lgslcbl

我的程序链接到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\u CC
设置为icc,因此
mpicc
调用英特尔编译器

当我尝试链接到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与英特尔编译器不兼容吗

这一错误的原因可能是什么

您没有向我们显示您的链接命令,但我的水晶球告诉我您正在尝试使用
ld
(或者可能使用
gcc
)而不是
icc
链接
libgsl.so


一般来说,在UNIX上不应将任何内容直接链接到
ld
。始终使用适当的编译器驱动程序(
icc

在使用icc编译的PETSc版本与gcc链接某些代码时,我也会收到相同的错误消息。更重要的是,在使用最新的英特尔12.x编译器编写最终代码时,使用英特尔11.x编译PETSc会产生与英特尔12.x使用11.x相同的错误消息


因此,请检查mpicc是否真的使用了Intel 11.1.072编译器。检查是否有
mpic++-show
哪个icc

可能是英特尔环境未设置。 请尝试以下环境设置:

source /etc/Intel_Compiler/10.0/XXXX/iccvars_intel64.sh
source /etc/Intel_Compiler/10.0/XXXX/ifortvars_intel64.sh
将文件夹设置为“英特尔编译器”文件夹。某些版本的环境设置不同,您也可以尝试:

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

希望有帮助。

我使用icc链接,我编辑了我的问题以包含链接命令。