c - 带有 MinGW 的 Eclipse 没有正确链接

标签 c eclipse linker mingw eclipse-cdt

我使用 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 文件应该会自动链接。

相反,我得到了 undefined reference :

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 文件链接到包含的 header 。 所以我找到了两个解决方案来绕过这个问题:

首先:手动编译程序:

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\Libraries\kiss_fft130\kiss_fftr.c 和 E:\Programming\Libraries\kiss_fft130\kiss_fft.c.

然后程序也可以正常编译。

两者都不是我的本意。因为我必须手动链接我在程序中使用的每个 *.c 文件。我在 Eclipse 属性中的错误是什么,它不会自动将正确的文件链接在一起?

很高兴得到答案,这样我就可以正确地开始编程了:)

最佳答案

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

关于c - 带有 MinGW 的 Eclipse 没有正确链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375164/

相关文章:

java - 在 Spring Data JPA 中连接两个实体

c - 为什么具有空参数列表的函数原型(prototype)与具有 char 参数的函数原型(prototype)冲突?

python - 通过 ctypes 从 Python 调用 C 代码,使用 python 对象列表

java - 如何从类路径中删除 JNA.jar?

java - FC_COLS 的原始类型 int 没有字段 inBlockSize

c - 何时一起编译文件以及何时使用库

windows - gcc -Wl 选项 : cannot pass comma inside

c++ - g++ - 无法链接到使用 VS2012 构建的静态库

c - 如何读取由c中的空格分隔的无符号字符

将指针返回函数的结果指针转换为引用,可作为参数传递给另一个函数