#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 в качестве версии для скачивания (предположительно, потому что она была последней — как глупо!) еще раз большое спасибо! Принял ваш ответ.