Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 架构x86_64的未定义符号;alglib::spline2dcalc(alglib::spline2dinterpolantconst,double,double,alglib::xparams)";_C++_Macos_Alglib - Fatal编程技术网

C++ 架构x86_64的未定义符号;alglib::spline2dcalc(alglib::spline2dinterpolantconst,double,double,alglib::xparams)";

C++ 架构x86_64的未定义符号;alglib::spline2dcalc(alglib::spline2dinterpolantconst,double,double,alglib::xparams)";,c++,macos,alglib,C++,Macos,Alglib,我想用alglib来做双三次样条插值,但是当我使用时 #include "stdlib.h" #include "stdio.h" #include "math.h" #include "interpolation.h" using namespace alglib; int main(int argc, char **argv) { // // We use bilinear spline to interpolate f(x,y)=x^2+2*y^2 sampled

我想用alglib来做双三次样条插值,但是当我使用时

#include "stdlib.h"
#include "stdio.h"
#include "math.h"
#include "interpolation.h"

using namespace alglib;


int main(int argc, char **argv)
{
    //
    // We use bilinear spline to interpolate f(x,y)=x^2+2*y^2 sampled 
    // at (x,y) from [0.0, 0.5, 1.0] X [0.0, 1.0].
    //
    real_1d_array x = "[0.0, 0.5, 1.0]";
    real_1d_array y = "[0.0, 1.0]";
    real_1d_array f = "[0.00,0.25,1.00,2.00,2.25,3.00]";
    double vx = 0.25;
    double vy = 0.50;
    double v;
    double dx;
    double dy;
    double dxy;
    spline2dinterpolant s;

    // build spline
    spline2dbuildbicubicv(x, 3, y, 2, f, 1, s);

    // calculate S(0.25,0.50)
    v = spline2dcalc(s, vx, vy);
    printf("%.4f\n", double(v)); // EXPECTED: 1.0625

    // calculate derivatives
    spline2ddiff(s, vx, vy, v, dx, dy, dxy);
    printf("%.4f\n", double(v)); // EXPECTED: 1.0625
    printf("%.4f\n", double(dx)); // EXPECTED: 0.5000
    printf("%.4f\n", double(dy)); // EXPECTED: 2.0000
    return 0;
}
要运行代码,它需要一个 架构x86_64的未定义符号:

g++ -I /Users/.../Documents/cpp/src -o a test.cpp

我如何才能让它工作?

您缺少适当的ALGLIB定义

解决方案:编译ALGLIB的源(.h和.cpp文件)以形成一个静态库文件,然后在调用test.cpp旁边的g++时添加它,以便编译器可以找到并使用缺少的定义

实现这一目标的步骤如下:

首先,将ALGLIB的所有源文件(.h和.cpp文件)放在一个单独的文件夹中,您可以从中调用:

"alglib::spline2dcalc(alglib::spline2dinterpolant const&, double, double, alglib::xparams)", referenced from:
      _main in ccmNfxlB.o
然后,将alglib.a文件复制到test.cpp所在的位置,然后从那里再次调用编译器,但这次是这样:

g++ -c *.cpp
ar rcs alglib.a *.o

可能您需要针对库进行链接,仅包含标题是不够的,或者如果仅包含标题库,则您需要为特定环境定义宏这些确实有效,感谢您解决了我的问题!
g++ -I /Users/.../Documents/cpp/src -o a test.cpp alglib.a