我使用Eclipse Luna IDE for C / C ++(CDT)和MinGW使用Microsoft Windows 7编写C语言。
我尝试编写一个使用KissFFT
的简单程序这不是一个直接的库,只有一些* .c和* .h-Files。
我的示例程序存储在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 - &gt; C / C ++一般 - &gt;路径和符号 - &gt;包括 - &gt; GNU C - &gt;在那里我添加了directorys E:\ Programming \ Libraries \ kiss_fft130和E:\ Programming \ Libraries \ kiss_fft130 \ tools
因为这是存储所需头文件和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-Files“kiss_fftr和kiss_fft”,编译很好。
第二个解决方案:在Eclipse中,我去了Project - &gt;属性 - &gt; C / C ++ Build - &gt;设置 - &gt;工具设置 - &gt; MinGW C Linker - &gt;其他 - &gt;其他对象 - &gt;并添加了E:\ Programming \ Libraries \ kiss_fft130 \ kiss_fftr.c和E:\ Programming \ Libraries \ kiss_fft130 \ kiss_fft.c。
然后程序编译也很好。
两者都不是我的意图。因为我必须手动链接我在程序中使用的每个* .c文件。我在Eclipse属性中的失败是什么,它不会自动将正确的文件链接在一起?
非常乐意得到答案,以便我可以正确开始编程:)
答案 0 :(得分:0)
您需要将C
个文件夹添加到Source Locations
中的Project Properties->C/C++ General->Paths and Symbols
。或者,如果您编译了kiss
库(.lib或.a),则应将其添加到链接器部分Library Search path
和Libraries