2012-03-14 4 views
0

Je suis en train de compiler le code suivant: http://www-personal.umich.edu/~mejn/dcbm/KLOptimization.cppC++ compiler - GSL sur x86_64

Mais je reçois le message d'erreur suivant g ++:

> Undefined symbols for architecture x86_64: "_gsl_rng_uniform_int", 
> referenced from: 
>  Initialize()  in ccDEqovL.o 
>  _main in ccDEqovL.o "_gsl_rng_default_seed", referenced from: 
>  _main in ccDEqovL.o "_gsl_rng_default", referenced from: 
>  _main in ccDEqovL.o "_gsl_rng_alloc", referenced from: 
>  _main in ccDEqovL.o "_gsl_rng_name", referenced from: 
>  _main in ccDEqovL.o "_gsl_rng_get", referenced from: 
>  _main in ccDEqovL.o "_gsl_rng_uniform", referenced from: 
>  _main in ccDEqovL.o "ComputeVI()", referenced from: 
>  _main in ccDEqovL.o "ComputeNMI()", referenced from: 
>  _main in ccDEqovL.o "_gsl_rng_free", referenced from: 
>  _main in ccDEqovL.o ld: symbol(s) not found for architecture x86_64 

Je MacBook Air, fonctionnant sous iOS 10.7.3 . g ++ est i686-apple-darwin11-llvm-g ++ - 4.2.

J'ai installé GSL en utilisant "brew installer GSL", qui a donné le résultat suivant:

==> Downloading http://ftpmirror.gnu.org/gsl/gsl-1.15.tar.gz 
######################################################################## 100.0% 
==> ./configure --prefix=/usr/local/Cellar/gsl/1.15 
==> make 
==> make install 
Warning: m4 macros were installed to "share/aclocal". 
Homebrew does not append "/usr/local/share/aclocal" 
to "/usr/share/aclocal/dirlist". If an autoconf script you use 
requires these m4 macros, you'll need to add this path manually. 
==> Summary 
/usr/local/Cellar/gsl/1.15: 237 files, 7.0M, built in 81 seconds 
+0

Dans quel objet se trouve '_gsl_rng_uniform_int'? Est-ce que vous le liez avec 'ccDEqovL.o'? –

+2

Il semble que vous ayez oublié de lier la bibliothèque GSL. Est-ce que votre ligne de commande contient un '-lgsl' (je crois que c'est ce qui est nécessaire) quand vous compilez? –

+0

... juste parce que je trouve parfois utile de poser la question bête - avez-vous, en fait, manuellement ajouté le chemin "/ usr/local/share/aclocal" à "/ usr/share/aclocal/dirlist"? –

Répondre

9

Il vous semble oublié de relier la bibliothèque GSL. Il suffit d'ajouter le -lgsl et cela devrait fonctionner (en supposant que gsl se trouve dans le chemin de votre bibliothèque).