[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-gsl] Random generator: linking problem
From: |
Carl Boettiger |
Subject: |
Re: [Help-gsl] Random generator: linking problem |
Date: |
Mon, 11 May 2009 10:34:13 -0700 |
If you compile an executable instead of an object file (without -c)
does it work?
-Carl
On Mon, May 11, 2009 at 8:02 AM, Marco Tului <address@hidden> wrote:
> Hi all,
> excuse me, I'm trying to compile a random generator C++ class for my
> library, in which I use the GSL. But even tough I compile without errors my
> hpp/cpp, when in a test main file I try to instantiate an object of it, I
> have these linking errors:
>
> ::::::::::::::::::::::::::::::::::::::::::::::
> /usr/bin/ld: Undefined symbols:
> _gsl_rng_alloc
> _gsl_rng_default
> _gsl_rng_free
> collect2: ld returned 1 exit status
> make: *** [default] Error 1
> ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>
> I have read the GSL manual, and in my Makefile I wrote:
>
> :::::::::::::::::::::::
> # RANDOM_NUMBER_GENERATOR
> random_generator.o: random_generator.hpp random_generator.cpp
> g++ -c random_generator.cpp -lgsl -lgslcblas -lm
> ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>
> as it seemed me correctly, so, why that? The hpp of my class is:
>
> :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
> #ifndef RANDOM_GENERATOR__HPP
> #define RANDOM_GENERATOR__HPP
>
>
> #include <gsl/gsl_rng.h> // here we use the "GNU Scientific Library" (GSL)
> to obtain a random number
> #include <gsl/gsl_randist.h> // to obtain gsl_ran_gaussian()
> #include <iostream>
> using namespace std;
>
>
> enum Distribution_type {
> NORMAL = 1,
> UNIFORM = 2,
> BINARY = 3
> };
>
>
> class Random_generator {
>
> private:
> const gsl_rng_type *_type_gen;
> gsl_rng *_gen; // 'gen' is the (random) generator
>
> Distribution_type _distr_type;
>
>
> public:
> // default CONSTRUCTOR
> Random_generator( ) {
> _type_gen = gsl_rng_default;
> _gen = gsl_rng_alloc(_type_gen); // in this way we allocate, in the
> standard way, the generator 'gen'
> };
>
> // DESTRUCTOR
> ~Random_generator( ) {
> gsl_rng_free(_gen); // we free the memory associated with the
> generator 'r'
> };
>
>
> double Get_rnd_generator( ) const { // by default we assume
> Distribution_type = NORMAL
> return gsl_ran_gaussian(_gen, 1);
> };
>
> double Get_rnd_generator(Distribution_type distr_type_init) const {
> if(distr_type_init == NORMAL) {
> return gsl_ran_gaussian(_gen, 1);
> }
> else if(distr_type_init == UNIFORM) {
> // vv return sample da distribuzione uniforme...
> }
> else if(distr_type_init == BINARY) {
> // vv return sample da distribuzione binaria...
> }
> };
>
>
> };
>
>
> #endif
> ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>
>
> The cpp file simply include that hpp. By the way, I've installed and
> compiled my GSL (with shared libraries option etc.) on my Mac Os 10.4.11.
>
>
>
>
> Thanks in advance, bye.
>
> Marco Tului.
> _______________________________________________
> Help-gsl mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/help-gsl
>
--
Carl Boettiger
Population Biology, UC Davis
http://two.ucdavis.edu/~cboettig