【问题标题】:Compiling simple Opt++ example: Undefined reference to dswap_编译简单的 Opt++ 示例:对 dswap_ 的未定义引用
【发布时间】:2016-06-16 21:47:33
【问题描述】:

我下载了Opt++。我做了basic install:

1. cd optpp-2.4
2. ./configure
3. make >& make.log
4. make check >& makecheck.log
5. make install

我在下面的代码中复制了Example 1: Unconstrained Quasi-Newton Without Derivatives。但是当我尝试编译时,即

g++ run_rosen.cpp rosen.cpp -Wno-write-strings -DHAVE_NAMESPACES -I/usr/local/include -I/usr/local/lib -lopt -lnewmat

我收到以下错误。而且我也觉得奇怪的是有对我下载目录的引用。

//usr/local/lib/libopt.a(dqrdc.o): In function dqrdc:
/home/a/downloads/optpp-2.4/src/PDS/dqrdc.c: 156: undefind reference to dswap_
/home/a/downloads/optpp-2.4/src/PDS/dqrdc.c: 182: undefind reference to dswap_
...
//usr/local/lib/libopt.a(pdsdone.o): In function pdsdone:
/home/a/downloads/optpp-2.4/src/PDS/pdsdone.c: 128: undefind reference to dnrm2_
...

代码:

run_rosen.cpp

#include <fstream>
#include "rosen.h"
#include "NLF.h"
#include "OptQNewton.h"


using namespace OPTPP;

int main()
{
    int ndim = 2;
    FDNLF1 nlp (ndim, rosen, init_rosen);
    OptQNewton objfcn(&nlp);

    objfcn.setSearchStrategy(TrustRegion);
    objfcn.setMaxFeval(200);
    objfcn.setFcnTol(1.e-4);

    if (!objfcn.setOutputFile("rosen.out", 0))
    {
        cerr << "main: output file open failed" << endl;
    }

    objfcn.optimize();
    objfcn.printStatus("Solution from quasi-newton");
    objfcn.cleanup();
}

罗森.h

#ifndef ROSEN_H
#define ROSEN_H

#include "NLF.h"
#include "OptNewton.h"

void init_rosen(int ndim, NEWMAT::ColumnVector& x);

void rosen(int ndim, const NEWMAT::ColumnVector& x, double& fx, int& result);

#endif // ROSEN_H

罗森.cpp

#include "rosen.h"

void init_rosen(int ndim, NEWMAT::ColumnVector& x)
{
    if (ndim != 2)
    {
        exit(1);
    }

    x(1) = 1.2;
    x(2) = 1.0;
}

void rosen(int ndim, const NEWMAT::ColumnVector& x, double& fx, int& result)
{

    if (ndim != 2)
    {
        exit(1);
    }

    double f1, f2;
    f1 = (x(2) - x(1) * x(1));
    f2 = 1. - x(1);
    fx = 100. * f1 * f1 + f2 * f2;
    result = OPTPP::NLPFunction;
}

【问题讨论】:

    标签: c++ c++11 optimization shared-libraries static-libraries


    【解决方案1】:

    您需要链接到 BLAS 库。尝试将其添加到构建命令的末尾:

    -lblas
    

    【讨论】:

    • 谢谢。附带说明一下,您是否有使用 Opt++ 和其他优化库的经验?如果是这样,您是否推荐任何其他库?
    猜你喜欢
    • 2012-05-30
    • 2014-04-24
    • 2019-03-18
    • 2021-06-09
    • 1970-01-01
    • 2012-08-16
    • 2013-11-20
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多