Как использовать библиотеки Octave с C ++ - PullRequest
3 голосов
/ 15 декабря 2011

Это мой первый вопрос здесь, так что извините, если он не сформулирован правильно или глуп.

Я пытаюсь использовать октавные библиотеки с C ++

Я использую Qt Creator в Ubuntu (linux noob)

#include "octave/oct.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Matrix matrix(3,4);

    return a.exec();
}

Сначала я получил несколько неопределенных ошибок в ссылках. Я выяснил, что в программе отсутствуют библиотеки, поэтому я искал библиотеку "liboctave.so". Я нашел это в usr / lib / octave-3.2.4. Чтобы быть более точным, существует символическая ссылка с именем "liboctave.so", указывающая на файл "liboctave.so.3.2.4". Я использовал функцию «Добавить библиотеку» QtCreators, чтобы добавить библиотеку в свой проект. Программа сгенерировала этот код в моем .pro файле

unix:!macx:!symbian: LIBS += -L$$PWD/../../../../usr/lib/octave-3.2.4/ -loctave

INCLUDEPATH += $$PWD/../../../../usr/lib/octave-3.2.4
DEPENDPATH += $$PWD/../../../../usr/lib/octave-3.2.4

Программа построена без ошибок. Даже не жалуюсь на неопределенные ссылки. Но когда я запускаю его, я получаю

Запуск /home/martin/Projects/test-build-desktop/test...

/home/martin/Projects/test-build-desktop/test: error while loading shared libraries: liboctave.so: cannot open shared object file: No such file or directory
/home/martin/Projects/test-build-desktop/test exited with code 127

Я не могу понять, почему он не может найти файл. Я смотрю на файл невооруженным глазом.

Я выяснил, что проблема может быть в разрешении, поэтому я скопировал файл "liboctave.so.3.2.4" в местоположение проекта, переименовал его в "liboctave.so" и добавил все разрешения для всех. Затем добавил эту библиотеку, используя функцию «добавить библиотеку» Qtcreator, и я все еще получаю ту же ошибку.

Пожалуйста, помогите мне

1 Ответ

2 голосов
/ 15 декабря 2011

liboctave не устанавливается в стандартном месте, когда вы его компилируете параметр -L$$PWD/../../../../usr/lib/octave-3.2.4/ однако в бегах раз неизвестно.

Итак, у вас есть два варианта:

  1. Укажите переменную среды LD_LIBRARY_PATH=/full/path/to/usr/lib/octave-3.2.4 и запустите программу:

    export LD_LIBRARY_PATH=/full/path/to/usr/lib/octave-3.2.4
    
  2. Жесткий код пути с помощью excutable, используя дополнительную опцию: -Wl,-rpath=$$PWD/../../../../usr/lib/octave-3.2.4/

    И он будет искать его в этом месте.

...