2

我的程序链接到 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 编译器不兼容吗?

4

3 回答 3

1

此错误的原因可能是什么?

您没有向我们展示您的链接命令,但我的水晶球告诉我您正在尝试libgsl.sold(或可能与gcc)链接,而不是icc.

一般来说,永远不应该ld在 UNIX 上直接链接任何东西。始终使用适当的编译器驱动程序(icc在这种情况下)。

于 2012-06-05T04:53:20.523 回答
1

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

所以检查一下,那个 mpicc 真的使用 Intel 11.1.072 编译器。检查mpic++ -showwhich icc

于 2012-06-07T07:52:45.690 回答
0

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

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

希望有所帮助。

于 2019-08-21T08:53:14.877 回答