编译问题

编译问题

当我尝试运行程序时收到以下错误消息。

undefined reference to `fftw_malloc'
f11.c:(.text+0x24d): undefined reference to `fftw_malloc'
f11.c:(.text+0x260): undefined reference to `fftw_malloc'
f11.c:(.text+0x273): undefined reference to `fftw_malloc'
f11.c:(.text+0x286): undefined reference to `fftw_malloc' 

等等。

到底是什么问题?11.04 版本运行正常,请帮忙!


我重新安装了 gcc,但问题仍然存在,我使用了如下命令:g++ -lfftw3 -lcpgplot -lpgplot f11.c. 输出为:未定义引用 tofftw_malloc' f11.c:(.text+0x260): 未定义引用 fftw_malloc' f11.c:(.text+0x273): 未定义引用 tofftw_malloc' f11.c:(.text+0x286): 未定义引用 `fftw_malloc

对 cpgpage 未定义引用cpgbeg' f11.c:(.text+0x2d3c): undefined reference to' f11.c:(.text+0x2d49): 对cpgsch' f11.c:(.text+0x2d71): undefined reference tocpgsvp 未定义引用' 请给我建议。

答案1

好的,Ubuntu 软件包libfftw3-dev已安装,这很明显,因为您会收到一条错误消息

/usr/bin/ld: cannot find -lfftw3

如果链接器没有找到该库。

有一个提示gcc 链接器文档说给链接器的文件顺序很重要。引用自文档

在命令中写入此选项的位置有所不同 [-l图书馆];链接器按照指定的顺序搜索和处理库和目标文件。因此,foo.o -lz bar.o 在文件 foo.o 之后但在 bar.o 之前搜索库 z。如果 bar.o 引用 z 中的函数,则可能不会加载这些函数。

就你的情况而言,没有f11.c从指定的库中加载引用的函数,因为它们被列出 f11.c。这有点违反直觉,但我很确定使用

g++ f11.c -lfftw3 -lcpgplot -lpgplot

将是解决问题的方法。不过,您可能需要检查库的顺序,以防它们相互依赖。一般来说,如果(文件或库)x 依赖于(文件或库)y,请确保在提供给链接器的命令行上将 x 列在 y 之前。

答案2

似乎您缺少某种动态库。可能是标准 C 库和快速傅立叶变换。尝试重新安装您的编译器 - 这可能会有所帮助。第二件事是再次创建您尝试链接的快速傅立叶库。

相关内容