我的程序链接到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编译器不兼容吗?
答案 0 :(得分:1)
导致此错误的原因是什么?
您没有向我们展示您的链接命令,但我的结晶球告诉我您正在尝试将libgsl.so
与ld
(或可能与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++ -show
和which 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
希望有帮助。