使用pgcc,未定义的引用编译FFTW

时间:2018-04-15 11:54:24

标签: c fftw pgi pgcc

对于其他软件,我需要安装--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`

./configuremake期间成功完成,我收到此错误消息:

/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时没有任何变化。仍然是同样的错误。

0 个答案:

没有答案