2014-02-26 55 views
5

我想编译一个程序与Netbeans(g ++),包括拉奎拉,an open source libary。我跟着the installation instructions未定义的引用与外部C

但尝试编译一个小的测试程序时,我得到这个错误

In function `Aquila::OouraFft::fft(double const*)':OouraFft.cpp:(.text+0x24f): 
undefined reference to `cdft' 

OouraFft.h:

#include "Fft.h" 

extern "C" { 
    void cdft(int, int, double *, int *, double *); //prototypes of offending function 
    void rdft(int, int, double *, int *, double *); //second one. 
} 

libs文件夹中的C文件中包含的函数的定义。

导致实际的错误在 OouraFft.cpp行:

// let's call the C function from Ooura's package 
    cdft(2*N, -1, a, ip, w); 

所以我想到的是外部C文件不被与项目挂钩,但包括在项目目录中的所有目录。 我一直在谷歌搜索几个小时,无法弄清楚。

+0

有该C文件的头文件?是,然后尝试使用'extern“C”{“MyCHeader.h” }' –

+3

实际上,这看起来像一个链接错误而不是编译错误。你有没有想过为你的图书馆添加一个链接选项? EG如果它被称为'libfft',你会想要将'-lfft'添加到链接行。即使你有一个单独的源文件,并且认为你只是编译,你也会链接(也许作为编译步骤的一部分),并且需要指定链接到哪个库。 – abligh

回答

5

至于git版本6f5d6b,Aquila的CMake配置默认会生成静态库。您应该将/path-to-your-build-tree/lib/libOoura_fft.a复制到/path-to-your-install-dir/lib/,并将其链接到您的测试程序。

+2

您还必须确保ooura_fft在您的库中已链接......我遇到了同样的问题,并认为ooura_fft的东西将包含在libAquila.a中。因此,将libOoura_fft.a复制到lib目录中,并将-looura_fft包含在makefile中。 –

1

由于Answeror说你需要将libOoura_fft.a放在正确的位置(/usr/local/liblibAquila.a的默认值)。

您还需要链接到它作为克里斯范德维尔德说,但你应该链接到-lOoura_fft(第一个“O”大写)。你应该链接-lAquila以及

只是想澄清。