Компиляция C++ — GSL на x86_64

Я пытаюсь скомпилировать следующий код: http://www-personal.umich.edu/~mejn/dcbm/KLOptimization.cpp

Но я получаю следующее сообщение об ошибке от 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

У меня MacBook Air с iOS 10.7.3. g++ — это i686-apple-darwin11-llvm-g++-4.2.

Я установил GSL, используя «brew install gsl», что дало следующий результат:

==> 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

person utdiscant    schedule 14.03.2012    source источник
comment
В каком объекте находится _gsl_rng_uniform_int? Вы связываете это с ccDEqovL.o?   -  person Carl Norum    schedule 15.03.2012
comment
Похоже, вы забыли связать библиотеку GSL. Содержит ли ваша командная строка -lgsl (я считаю, что это необходимо) при компиляции?   -  person Ken Wayne VanderLinde    schedule 15.03.2012
comment
... просто потому, что мне иногда полезно задать глупый вопрос - действительно ли вы вручную добавили путь /usr/local/share/aclocal в /usr/share/aclocal/dirlist?   -  person Ben Barden    schedule 15.03.2012
comment
Что я пропустил, так это флаг -lgsl. Но что касается глупого вопроса, я на самом деле пропустил это, но это ничего не изменило. Добавьте свой комментарий в качестве ответа, Кен, и я отмечу его как правильный. Большое спасибо :).   -  person utdiscant    schedule 15.03.2012


Ответы (1)


Кажется, вы забыли связать библиотеку GSL. Просто добавьте -lgsl, и все должно работать (при условии, что gsl указан в пути к вашей библиотеке).

person Ken Wayne VanderLinde    schedule 14.03.2012