Компиляция и запуск демо триангуляции CGAL - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь использовать библиотеку CGAL для отображения 2D триангуляции Делоне, как в примере здесь

Мой код выглядит следующим образом:

#include <iostream>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <CGAL/draw_triangulation_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Triangulation;
typedef Triangulation::Point Point;

int main(void){
    Point a(1,1), b(2,1), c(2,2), d(1,2);

    Triangulation T;
    T.insert(a);
    T.insert(b);
    T.insert(c);
    T.insert(d);

    CGAL::draw(T);

    return 0;
}

Когда я пытаюсь скомпилировать этот код с помощью g++ -o cgalTest.exe cgalTest.cpp -lCGAL -lgmp, программа успешно компилируется, но во время выполнения я получаю Impossible to draw because CGAL_USE_BASIC_VIEWER is not defined

При поиске в Google я нашел кого-то, кто предложил использовать g++ -o cgalTest.exe cgalTest.cpp -lCGAL -lgmp -DCGAL_USE_BASIC_VIEWER, который выдает следующую ошибку навремя компиляции: /usr/include/CGAL/Qt/Basic_viewer_qt.h:30:10: fatal error: QApplication: No such file or directory #include <QApplication>

Я использую Ubuntu 19.04, поэтому я установил CGAl, используя sudo apt-get install libcgal-dev и sudo apt-get install libcgal-qt5-dev

Я также попытался установить sudo apt-get install libqt5svg5-dev libqt5opengl5-dev, чтобы устранить ошибку,но безрезультатно.

Нужно ли устанавливать дополнительные библиотеки?Может быть, сборка должна быть выполнена по-другому?

Спасибо

1 Ответ

0 голосов
/ 16 июня 2019

Хорошо, для тех, кто столкнулся с той же проблемой, вот как я ее решил:

Сначала я использовал команду locate QApplication, чтобы найти местоположение файла заголовка QApplication в моей системе.Обязательно запустите sudo updatedb перед использованием locate.Если locate не находит местоположение QApplication, значит, вам не хватает библиотек qt.Попробуйте sudo apt-get install qt5-default и другие библиотеки, которые я упомянул в своем вопросе, запустите sudo updatedb и попробуйте locate QApplication снова.

Когда вы найдете путь к QApplication, просто используйте опцию -I, чтобы указатькомпилятор, чтобы использовать его.Вот пример g++ -o delaunayTest delaunayTest.cpp -lCGAL -lgmp -lCGAL_Qt5 -DCGAL_USE_BASIC_VIEWER -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets/ (потому что в моем случае QApplication находился внутри каталога /usr/include/x86_64-linux-gnu/qt5/QtWidgets/)

Попытка скомпилировать это, вы, вероятно, получите еще одну ошибку файла заголовка.Повторяйте тот же процесс, используя locate, пока не получите больше ошибок файла заголовка.

В этот момент вы, вероятно, столкнетесь с ошибкой undefined reference to symbol.

Чтобы решить эту проблему, используйте locate снова, чтобы найти местоположение файла, который вызвал ошибку (например, libQt5OpenGL.so.5) и добавить путь к команде компиляции как есть (например, g++ -o delaunayTest delaunayTest.cpp /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5) вместе со всеми предыдущими параметрами.

Вы, вероятно, также получите несколько undefined reference to symbol ошибок.Просто продолжайте использовать тот же метод, пока вы не получите ничего.

На этом этапе программа должна правильно скомпилироваться и работать.

Обратите внимание, что если у вас установлено несколько версий qt, товышеописанное может не работать должным образом (если, например, в вашей системе установлено программное обеспечение, использующее qt, например MATLAB или anaconda. Вы будете знать, потому что locate создаст много путей для каждого файла на шагах выше).В таком случае я предлагаю создать виртуальную машину, загрузить библиотеки CGAL и qt5-default и выполнить там описанные выше шаги, поскольку весьма вероятно, что это не будет работать в системе с несколькими установками qt.

...