2012-04-10 33 views
0

我在Windows 7/Visual Studio 2010中构建项目时遇到了困难,并且已经花费了比我承认使用Google搜索和修复其他错误以达到此点的时间更长,但令人沮丧的是,我无法看到摆脱最后一个错误。存在与在math.h中定义的函数_hypot接头错误:libgsl和wxwidget问题

wxTheAppInitializer”(?wxTheAppInitializer @@ 3VwxAppInitializer @@ A) 在main.obj 1> libgsl.a(linalg_svd.o已经定义):错误LNK2019: 解析的外部符号在功能_hypot引用 _gsl_linalg_SV_decomp 1> libgsl.a(matrix_oper.o):错误LNK 2001:解析外部符号_hypot 1> libgsl.a(linalg_householder.o): 错误LNK2001:解析外部符号_hypot

:致命错误LNK1120:1个未解决的外部事件

当我跟随的unresolved external symbol "_hypot" when using static library的意见,我得到如下:

1>生成代码... 1> main.obj:错误LNK2005:_hypot已经 在About.obj 1>致命错误定义LNK1169:一个或多个乘法 定义符号找到

谁能解释这是怎么回事?

+0

我意识到,如果我干脆注释掉math.h中_hypot,并在我的主重新实现它。 CC为: 的#include 的extern “C” { \t双hypot将(双_X,双_Y) \t { \t \t return _hypot(_X,_Y); \t} } 然后我可以建立没有错误。我认为这是原来的帖子所得到的。但它似乎是一个非常肮脏的修复。任何人都可以提出一个更清洁的修复程序,而无需永久编辑math.h – LPlates 2012-04-10 10:20:54

回答

0

创建包含以下内容.c文件:

extern double fabs(double); 
extern double sqrt(double); 

double hypot(double x, double y) { 
    double ax = fabs(x), ay = fabs(y); 
    double xy = x/y, yx = y/x; 
    return ax > ay 
    ? ax * sqrt(1.0 + yx*yx) 
    : ay * sqrt(1.0 + xy*xy); 
} 

不包括文件math.h