GNU GSL сортирует два вектора

#c #sorting #vector #gsl

#c #сортировка #вектор #gsl

Вопрос:

Недавно я использовал GNU GSL для векторных вычислений — и до сих пор это было потрясающе! Теперь, однако, я хотел бы отсортировать два вектора (отсортировав один вектор, а затем отсортировав другой вектор на основе первого). К счастью, у GNU GSL, похоже, есть функция для этого, как указано:

Function: void gsl_sort_vector2 (gsl_vector * v1, gsl_vector * v2)
This function sorts the elements of the vector v1 into ascending numerical order, while making the same rearrangement of the vector v2.

.. это именно то, чего я хотел. Однако, когда я пытаюсь реализовать это, я продолжаю получать неопределенную ошибку gsl_sort_vector2 . Итак, мой skeletal код выглядит следующим образом:

 #include <stdio.h>
#include <math.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_sort_vector.h>

< do some vector related stuff here >

/*     This works completely fine      */
/* gsl_sort_vector (res); */

/*     This gives the undefined error      */
gsl_sort_vector2 (res, id);
  

где res и id являются векторами GSL.

При компиляции ошибка просто:

undefined reference to gsl_sort_vector2 collect2: error: ld returned 1 exit status

Мне было интересно, что я мог делать неправильно, но до сих пор это не увенчалось успехом. Был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление.

Комментарии:

1. научная библиотека gnu gnu?

2. Да, Стив, это верно: gnu.org/software/gsl

3. Как выглядит ваша команда компиляции? Вы передаете -Wall и удаляете все предупреждения? Какую версию gcc и gsl вы используете? Каковы ваши векторы? Вы включили соответствующий заголовок сортировки типа? (например: gsl_sort_vector_float.h )

4. gcc -g -ansi -pedantic -W -Wall -I .. это то, что я использую. Я не думаю, что это проблема. Мои векторы — это простые векторы с плавающей точкой, если быть точным. Как я уже упоминал, gsl_sort_vector работает абсолютно нормально — это означает, что у меня правильные заголовки. gcc ==4.7.2; gsl == 1.9.

Ответ №1:

На странице магистрали GSL показано, что gsl_sort_vector2 это было добавлено только в версии 1.16 (фиксация 4821). Тогда вы, вероятно, используете старую версию библиотеки, учитывая, что вы заявляете, что все другие векторные операции работают нормально (это означает, что проблемы со связыванием нет)

Комментарии:

1. @Vinivius: Я использую версию 1.9 — поэтому версия, я думаю, не проблема.

2. 1.9? Это очень старая версия.

3. А .. ваше право!! По какой-то причине я выбрал 1.9 в качестве версии для скачивания (предположительно, потому что она была последней — как глупо!) еще раз большое спасибо! Принял ваш ответ.