【发布时间】:2015-04-07 03:35:44
【问题描述】:
我使用 Eclipse Luna IDE for C/C++ (CDT) 和 MinGW 使用 Microsoft Windows 7 进行 C 编程。
我尝试编写一个使用KissFFT的简单程序
这不是直接的库,这只是一些 *.c 和 *.h 文件。
我的示例程序存储在 E:\Programming\Programs\Simple_FFT\
这是我的示例程序:
#include <stdio.h>
#include <stdlib.h>
#include <tools/kiss_fftr.h>
int nfft = 1024;
int inverse_fft = 0;
int main(void) {
kiss_fftr_cfg cfg = kiss_fftr_alloc(nfft, inverse_fft, NULL, NULL);
kiss_fft_scalar timedata[nfft]; //input
kiss_fft_cpx freqdata[nfft]; //output
while (1)
{
timedata[nfft] = 0;
kiss_fftr(cfg, timedata, freqdata);
free(cfg);
}
return 0;
}
如您所见,我包含了kiss_fftr.h。 另一方面,这个文件包含了kiss_fft.h。
在 Eclipse 中,我转到 Properties -> C/C++ General -> Paths and Symbols -> Includes -> GNU C -> 在那里我添加了目录 E:\Programming\Libraries\kiss_fft130 和 E:\Programming\库\kiss_fft130\工具
因为这是存放需要的头文件和c文件的文件夹。
所以一切都很好,不是吗?
但现在奇怪的是:我不能用 Eclipse 编译程序。我对编程比较陌生,但据我所知,如果我包含头文件并且目录包含在 Eclipse 中,则应自动链接相关的 *.c 文件。
相反,我得到未定义的引用:
src\Simple_FFT.o:Simple_FFT.c:(.text.startup+0x3b): undefined reference to `kiss_fftr_alloc'
src\Simple_FFT.o:Simple_FFT.c:(.text.startup+0x86): undefined reference to `kiss_fftr'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: src\Simple_FFT.o: bad reloc address 0x20 in section `.eh_frame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
问题是,Eclipse 没有将 KissFFT 的 c 文件链接到包含的头文件。 所以我找到了两种解决方案来绕过这个问题:
首先:手动编译程序:
gcc -o E:\Programming\Programs\Simple_FFT\Release\Simple_FFT -I"E:\Programming\Libraries\kiss_fft130" -I"E:\Programming\Libraries\kiss_fft130\tools" E:\Programming\Programs\Simple_FFT\src\Simple_FFT.c E:\Programming\Libraries\kiss_fft130\tools\kiss_fftr.c E:\Programming\Libraries\kiss_fft130\kiss_fft.c
如您所见,我手动包含了 *.c 文件“kiss_fftr 和 Kiss_fft”,编译很好。
第二个解决方案:在 Eclipse 中,我转到 Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MinGW C Linker -> Miscellaneous -> Other Objects -> 并添加了 E:\Programming\库\kiss_fft130\kiss_fftr.c 和 E:\Programming\Libraries\kiss_fft130\kiss_fft.c。
那么程序也可以正常编译了。
两者都不是我的意图。因为我必须手动链接我在程序中使用的每个 *.c 文件。我在 Eclipse 属性中的失败是什么,它不会自动将正确的文件链接在一起?
很高兴得到答案,以便我可以开始正确编程:)
【问题讨论】:
标签: c eclipse linker mingw eclipse-cdt