[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#416705: ../sysdeps/i386/elf/start.S:115: undefined reference to `main'



Package: g++-4.1
Version: 4.1.1-21
Severity: serious
Justification: no longer builds from source

I would compile a cpp source but when compiling with

g++ -o VelocityModel VelocityModel.cc

i receive this error

/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o: In function `_start':
.../sysdeps/i386/elf/start.S:115: undefined reference to `main'
collect2: ld returned 1 exit status


then there is the file:
VelocityModel.cc


----------------------------------------------------------------------------------

// Esercizio 2: motion models
//
// Classe VelocityModel
//
// Implementa gli algoritmi per il modello di velocità
//
//
// Istruzioni compilazione:
// g++ -o VelocityModel VelocityModel.cc 
//


#include <time.h>
#include <stdlib.h> 
#include <unistd.h>
#include <cmath>


using namespace std; 
class VelocityModel {
 
public:
    
    //impostare a1, a2, a3, a4, a5, a6
    //sono i parametri di rumore del moto    
    double a1;
    double a2;
    double a3;
    double a4;
    double a5;
    double a6;

    //quanto è deltaT (tempo)????
    double dT;

    //costruttore semplice
    VelocityModel()
    {
    }	

    //costruttore che riceve come parametri di ingresso i valori di a e di deltaT
    VelocityModel(double aa1,double aa2,double aa3,double aa4,double aa5,double aa6, double ddT ) 
    {
	a1=aa1;
	a2=aa2;
	a3=aa3;
	a4=aa4;
	a5=aa5;
	a6=aa6;
	dT=ddT;
    }
 
    ~VelocityModel( )
    {
    }
    //algoritmo motion_model_velocity ( pg.123 tabella 5.1)
    double algoritmo(double ipotPose[], double control[], double initPose[] ) 
    {
	double mu= 0.5 * ( ((initPose[1]-ipotPose[1])*cos(initPose[3])) + 
((initPose[2]-ipotPose[2])*sin(initPose[3])) ) /
                  ( ((initPose[2]-ipotPose[2])*cos(initPose[3])) - 
((initPose[1]-ipotPose[1])*sin(initPose[3])) ); 

	double xstar= 0.5*(initPose[1]+ipotPose[1]) + mu*(initPose[2]-ipotPose[2]);

	double ystar= 0.5*(initPose[2]+ipotPose[2]) + mu*(ipotPose[1]-initPose[1]);

        double rstar= sqrt( (initPose[1]-xstar)*(initPose[1]-xstar) +(initPose[2]-ystar)*(initPose[2]-ystar) 
);

	double dTeta= atan2( (ipotPose[2]-ystar) , (ipotPose[1]-xstar) ) - atan2( (initPose[2]-ystar) 
,(initPose[1]-xstar) );

	double vC= dTeta*rstar/dT; 

        double omegaC= dTeta/dT; 

	double gammaC= ((ipotPose[3] - initPose[3]) * dT) - omegaC;  

	return ( prob( (control[1] - vC), (a1* abs(control[1]) + a2*abs(control[2]) ) )     *
		 prob( (control[2] - omegaC), (a3* abs(control[1]) + a4*abs(control[2]) ) ) *
		 prob( gammaC, (a5* abs(control[1]) + a6*abs(control[2]) ) )                );

    }

    //algoritmo di supporto al motion_model_velocity (pg. 123 tabella 5.2)
    //la funzione calcola la probabilità del suo argomento "a" sotto una distribuzione centrata
    //a zero con deviazione standard "b"
    double prob(double a, double b)
    {
	//prob_normal_distribution
	return ( (1/sqrt(2*M_PI*b*b))* exp(-0.5*a*a*(1/b)*(1/b))	);

	//prob_triangular_distribution
	// return ( max<double>( 0 , ( (1/(sqrt(6)*b)) - (abs(a)/(6*b*b)) ) ) );
    }



    //algoritmo sample_motion_model_velocity (pg.124, tabella 5.3) 
    //la funzione  ritorna un array. 
    //per prendere il valore dall'esterno: inizializzare il vettore come puntatore 
    //
    //esempio:
    //
    // double *vettore;
    // vettore=sample_algoritmo(control, initPose);
    double* sample_algoritmo(double control[], double initPose[])
    {
	static double ipotPose[3];
	double vC= control[1] + sample(a1*abs(control[1]) + a2*abs(control[2]));
	double omegaC= control[2] + sample(a3*abs(control[1]) + a4*abs(control[2]));
	double gammaC= sample(a5*abs(control[1]) + a6*abs(control[2]));
	ipotPose[1]= initPose[1] - (vC/omegaC)*sin(initPose[3]) + (vC/omegaC)*sin(initPose[3] + omegaC*dT); 
	ipotPose[2]= initPose[2] + (vC/omegaC)*cos(initPose[3]) - (vC/omegaC)*cos(initPose[3] + omegaC*dT); 
	ipotPose[3]= initPose[3] + omegaC*dT + gammaC*dT; 

	return ipotPose;
    }

    //algoritmo di supporto al sample_motion_model_velocity (pg.124 tabella 5.4)
    //la funzione genera un campione random da una distribuzione centrata a zero con deviazione standard "b"
    double sample(double b)
    {
	//--------------------------
	//sample normal distribution
	//--------------------------
  	double ran;
	double somma=0;

  	// inizializza random seed:
	srand ( time(NULL) );

	// genera numero: 
	ran = (-b) + rand() * (b - (-b)) / RAND_MAX;
//	ran = rand() % b + (-b);
	
	for (int i=0; i<12; i++)
	{
		somma=somma+ran;
		ran = (-b) + rand() * (b - (-b)) / RAND_MAX;
	}   
	return (0.5*somma);


	//------------------------------
	//sample triangular distribution
	//------------------------------
	/*
  	double ran1,ran2;
  	// inizializza random seed:
	srand ( time(NULL) );
	// genera numero: 
	ran1 = (-b) + rand() * (b - (-b)) / RAND_MAX;
	ran2 = (-b) + rand() * (b - (-b)) / RAND_MAX;

	return (sqrt(6)*(ran1+ran2)/2);

	*/

    } //end sample

};
------------------------------------------------------------------------------------


-- System Information:
Debian Release: 4.0
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-4-686
Locale: LANG=it_IT.UTF-8, LC_CTYPE=it_IT.UTF-8 (charmap=UTF-8)

Versions of packages g++-4.1 depends on:
ii  gcc-4.1                     4.1.1-21     The GNU C compiler
ii  gcc-4.1-base                4.1.1-21     The GNU Compiler Collection (base 
ii  libc6                       2.3.6.ds1-13 GNU C Library: Shared libraries
ii  libstdc++6-4.1-dev          4.1.1-21     The GNU Standard C++ Library v3 (d

g++-4.1 recommends no packages.

-- no debconf information



Reply to: