对于其他软件,我需要安装--enable-mpi --enable-type-prefix --enable-float
的fftw-2.1.5。它应该使用pgcc
PGCC等安装在/home
目录下。对于这篇文章,我用path-to
缩短了它。
我做:
./configure --prefix=/path-to/fftw --enable-mpi --enable-type-prefix --enable-float CC=path-to/pgcc CXX=path-to/pgc++ F77=path-to/pgf77 FC=path-to/pgfortran make`
./configure
在make
期间成功完成,我收到此错误消息:
/usr/bin/ld: ../fftw/.libs/libsfftw.a(malloc.o): relocation R_X86_64_32 against .rodata' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: ../fftw/.libs/libsfftw.a(putils.o): relocation R_X86_64_32 against .rodata' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: ../fftw/.libs/libsfftw.a(twiddle.o): relocation R_X86_64_32 against .data' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Nonrepresentable section on output collect2: error: ld returned 1 exit status
我尝试使用-fPIC
标志重新编译:
make clean make CFLAGS="-fPIC"
然后我得到:
../fftw/.libs/libsfftw.a(twiddle.o): In function `fftw_compute_twiddle': /home/daniel/fftw-test/fftw-2.1.5/fftw/./twiddle.c:92: undefined reference to `__fd_sincos_1' /home/daniel/fftw-test/fftw-2.1.5/fftw/./twiddle.c:126: undefined reference to `__fd_sincos_1' ../fftw/.libs/libsfftw.a(twiddle.o): In function `fftw_compute_rader_twiddle': /home/daniel/fftw-test/fftw-2.1.5/fftw/./twiddle.c:65: undefined reference to `__fd_sincos_1' collect2: error: ld returned 1 exit status
我现在试图找到一个解决方案,解决为什么会发生这种情况数小时,但我无法弄明白。
当我将其配置为使用gcc编译器(系统默认)时,一切都运行良好:
./configure --prefix=/fftw --enable-mpi --enable-type-prefix --enable-float make make install
编辑,更多信息:
我需要fftw的程序需要pgcc。我觉得最好是用一些论坛网站推荐的东西来编译它。
在twiddle.c中,没有提及__fd_sincos_1
。例如,第92行很简单
for (i = 0; i < n; ++i) {
当我放弃--enable-type-prefix
时没有任何变化。仍然是同样的错误。