ARM Cortex M Procssor的GNU Scientific Library编译错误

时间:2016-06-21 08:45:49

标签: c++ c gsl wavelet

我在C中做小波,幸运的是找到了GSL-2.1。我正在尝试在Code Composer Studio和Energia 15中为ARM Cortex-M处理器连接GSL-2.1。代码非常简单

#include <stdio.h>
#include <math.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_blas.h>
#include <gsl/gsl_test.h>
#include <gsl/gsl_wavelet.h>
#include <gsl/gsl_wavelet2d.h>


int i, n=256, nc=20;
double data[256];
double abscoeff[256];
gsl_wavelet *w;
gsl_wavelet_workspace *work;

int main(){
w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4);
work = gsl_wavelet_workspace_alloc(256);

}

即使对于此代码,编译器也会在Energia 15中给出以下错误。

error: 'w' does not name a type
error: 'work' does not name a type

并且Code Composer Studio显示以下错误

undefined                   first referenced
 symbol                         in file     
---------                   ----------------
gsl_wavelet_alloc           ./main.obj      
gsl_wavelet_daubechies      ./main.obj      
gsl_wavelet_workspace_alloc ./main.obj   

error #10234-D: unresolved symbols remain

我已经问过它here并尝试在代码中进行一些修改。我不得不添加近5个c文件来减少#errors。现在我只收到一个错误

" RETURN_IF_NULL undef symbol first referenced in ./main.obj "

当然我需要在这里添加一个或多个.c文件,但我迷路了。你可以帮助我在这里添加哪个文件。 任何帮助都会受到关注。

1 个答案:

答案 0 :(得分:1)

阅读documentation,在我看来,有一个遗失的宏(RETURN_IF_NULL(x) if (!x) { return ; }) 应该由 autoconf 工具创建,使用configure.ac中的信息,并添加到config.h文件中,就像在此config.h中一样。

在源代码的文件configure.ac中,有一个指令:

AH_BOTTOM([#define RETURN_IF_NULL(x) if (!x) { return ; }
])

指示autoconf在运行./configure脚本后创建的文件config.h末尾添加宏(在我的OSX 10.10,gsl-2.1上测试)。

我猜配置过程中出了问题。如果您已在 gsl 的include目录中有配置文件,那么您可以在最后添加:

RETURN_IF_NULL(x) if (!x) { return ; }

或者您可以创建它,然后将其包含在源文件中。