次の機能があります(dm.cpp内)
#include <iostream>
#include <iterator>
#include <vector>
#include <cmath>
#include <Eigen/Dense>
#include "dm.hpp";//calculateStdDev() is declared in the header
double calculateStdDev(const Eigen::VectorXf& input, unsigned int count, double& mean, double& variance, double& stddev) {
double M = input(0);
double Q = 0.0;
for (unsigned int k = 1 ; k < count ; k++) {
double del = input(k) - M;
unsigned int j = k + 1;
Q += k * (del * del) / j;
M += del / j;
}
variance = Q / (count - 1);
stddev = std::sqrt(variance);
mean = M;
return stddev;
}
以下のように、私のプログラム test.cpp で呼び出されます。
#include <iostream>
#include <iterator>
#include <Eigen/Dense>
#include "dm.hpp"
void regressor::operator()(void) {
unsigned int rows;
double meanR, varR, stddevR;
Eigen::MatrixXf A(rows, cols);
Eigen::VectorXf b(rows),res(rows);
for (unsigned int k = 0 ; k < rows; k++) {
for (unsigned int j = 0 ; j < cols ; j++) {
A(k,j) = Xb[k][j];
}
}
beta = A.jacobiSvd(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(b);
res = A * beta - b;
calculateStdDev(res,rows,meanR,varR,stddevR);
}
次のエラーが表示されます。
In function `regressor::operator()()':
../../src/algo/test.cpp:55: undefined reference to `calculateStdDev(Eigen::Matrix<float, -1, 1, 0, -1, 1> const&, unsigned int, double&, double&, double&)'
collect2: ld returned 1 exit status
私のOSはubuntu(v.10)で、まったく同じプログラムをcygwinで実行すると動作します。これはGCCの問題であることを意味しますか。もしそうなら、誰でもそれを修正する方法を提案できます。
編集:私は以下を実行しています:
g++ test.cpp dm.cpp main.cpp -o et -lboost_date_time -lgsl -lgslcblas