我已经开始在一个巨大的旧C项目中重新使用gsl。我已设法通过在属性> C / C ++>一般>其他包含目录中添加系统中的位置来添加库。
在我的代码中,我还包括以下内容:
#include "gsl/gsl_matrix.h"
#include "gsl/gsl_matrix_complex_double.h"
#include "gsl/gsl_matrix_complex_float.h"
#include "gsl/gsl_matrix_complex_long_double.h"
#include "gsl/gsl_math.h"
#include "gsl/gsl_spmatrix.h"
#include "gsl/gsl_complex.h"
#include "gsl/gsl_complex_math.h"
#include "gsl/gsl_inline.h"
#include "gsl/gsl_complex.h"
我现在可以使用gsl的大部分功能了。但在以下功能中:
void vector_complex_mul_elements(gsl_vector_complex *v1, gsl_vector_complex *v2)
{
gsl_complex cpx1, cpx2, cpx3;
GSL_SET_COMPLEX(&cpx1, 0, 0);
GSL_SET_COMPLEX(&cpx2, 0, 0);
GSL_SET_COMPLEX(&cpx3, 0, 0);
if(v1->size != v2->size)
{
printf("Error: Lenght of arrays do not match.\n");
return;
}
for(i=0; i < v1->size; i++)
{
cpx1 = gsl_vector_complex_get(v1, i);
cpx2 = gsl_vector_complex_get(v2, i);
//cpx3 = gsl_complex_mul(cpx1 , cpx2);
gsl_vector_complex_set(v1, i, cpx3);
}
}
当我取消注释该行时:
cpx3 = gsl_complex_mul(cpx1 , cpx2);
我收到以下错误:
错误LNK2001:未解析的外部符号“_log1p”。
错误LNK2001:未解析的外部符号“_log1p”。
错误LNK2001:未解析的外部符号“_hypot”。
错误LNK1120:2个未解析的外部引用。
我已经尝试过写它:
gsl_vector_complex_set(v1, i, gsl_complex_mul(cpx1 , cpx2));
然后我得到了这些错误:
错误LNK2019:在函数“_gsl_complex_logabs”中引用未解析的外部符号“_log1p”。
错误LNK2019:在函数“_gsl_complex_div”中引用未解析的外部符号“_hypot”。
错误LNK2001:未解析的外部符号“_log1p”。
错误LNK1120:2个未解析的外部引用。
这只是一个链接问题或我使用它的方式是错误的吗?
答案 0 :(得分:1)
这些(lop1p
和hypot
)函数位于标准数学库中。你是否包括math.h
并链接到它(-lm
)?根据{{3}}。
答案 1 :(得分:1)
在我看来,您错误地链接了GSL库。 尝试以I showed的身份将GSL重新编译为dll并重新链接。