带有MinGW的Eclipse无法正确链接

时间:2015-02-06 21:32:15

标签: c eclipse linker mingw eclipse-cdt

我使用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属性中的失败是什么,它不会自动将正确的文件链接在一起?

非常乐意得到答案,以便我可以正确开始编程:)

1 个答案:

答案 0 :(得分:0)

您需要将C个文件夹添加到Source Locations中的Project Properties->C/C++ General->Paths and Symbols。或者,如果您编译了kiss库(.lib或.a),则应将其添加到链接器部分Library Search pathLibraries