2015-04-14 3 views
-1

У меня возникла ошибка, когда я пытаюсь скомпилировать код с помощью CGAL в Qt Creator.Ошибка компиляции CGAL с Qt Creator

Вот мой файл .pro:

QT  += core 

QT  -= gui 

TARGET = TestCCGALAppliConsole 
CONFIG += console 
CONFIG -= app_bundle 
CONFIG -= x86_64 
CONFIG += i386 

TEMPLATE = app 

INCLUDEPATH += /opt/local/include 
LIBS  += -L/opt/local/include 

SOURCES += main.cpp 



win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../opt/local/lib/release/ -lCGAL 
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../opt/local/lib/debug/ -lCGAL 
else:unix: LIBS += -L$$PWD/../../../opt/local/lib/ -lCGAL 

INCLUDEPATH += $$PWD/../../../opt/local/include 
DEPENDPATH += $$PWD/../../../opt/local/include 


win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../opt/local/lib/release/ -lCGAL_ImageIO 
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../opt/local/lib/debug/ -lCGAL_ImageIO 
else:unix: LIBS += -L$$PWD/../../../opt/local/lib/ -lCGAL_ImageIO 

INCLUDEPATH += $$PWD/../../../opt/local/include 
DEPENDPATH += $$PWD/../../../opt/local/include 

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../opt/local/lib/release/ -lCGAL_Core 
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../opt/local/lib/debug/ -lCGAL_Core 
else:unix: LIBS += -L$$PWD/../../../opt/local/lib/ -lCGAL_Core 

INCLUDEPATH += $$PWD/../../../opt/local/include 
DEPENDPATH += $$PWD/../../../opt/local/include 

Когда у меня есть этот код (это просто пример), работает:

#include <iostream> 
#include <CGAL/Simple_cartesian.h> 
#include <CGAL/Exact_predicates_exact_constructions_kernel.h> 

typedef CGAL::Simple_cartesian<double> Kernel; 
typedef Kernel::Point_2 Point_2; 
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel2; 
typedef Kernel2::Point_2 Point_2_2; 

int main() 
{ 
    // Point_2_2 p1(0, 0.3), q1(1, 0.6), r1(2, 0.9); 
    { 
    Point_2 p(0, 0.3), q(1, 0.6), r(2, 0.9); 
    std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n"); 
    } 
    { 
    Point_2 p(0, 1.0/3.0), q(1, 2.0/3.0), r(2, 1); 
    std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n"); 
    } 
    { 
    Point_2 p(0,0), q(1, 1), r(2, 2); 
    std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n"); 
    } 
    return 0; 
} 

Но когда я раскомментировать первую строку в main: Point_2_2 p1(0, 0.3), q1(1, 0.6), r1(2, 0.9);

Не работает, и у меня есть эта ошибка:

: -1: ERREUR: символ (ы) не найдено для архитектуры x86_64

Кто-то, чтобы помочь мне?

Спасибо!

+0

Показать, какая команда фактически выполняется, и полное сообщение об ошибке. Вероятно, вам не хватает '-lmpfr -lgmp'. CMake будет обрабатывать это для вас, если вы его использовали. –

+0

Я компилирую непосредственно в Qt Creator, и это полное сообщение об ошибке. Я добавил '-lmpfr -lgmp', но это не решает проблему. –

+0

Ошибка, о которой вы сообщаете, слишком короткая. Попробуйте выяснить, какие символы не найдены. Это должно быть что-то в полном журнале компиляции. – lrineau

ответ

2

Вот решение проблемы:

.pro файла:

QT  += core 

QT  -= gui 

TARGET = TestCCGALAppliConsole 
CONFIG += console 
CONFIG -= app_bundle 
CONFIG += c++11 

TEMPLATE = app 

INCLUDEPATH += /usr/local/include 
DEPENDPATH += /usr/local/include 
LIBS  += -L/usr/local/include 

macx: LIBS += -L/usr/local/lib/ -lgmp 
macx: LIBS += -L/usr/local/lib/ -lmpfr 
macx: LIBS += -L/usr/local/lib/ -lCGAL 

SOURCES += main.cpp 

main.cpp:

#include <iostream> 
#include <CGAL/Simple_cartesian.h> 
#include <CGAL/Exact_predicates_exact_constructions_kernel.h> 

typedef CGAL::Simple_cartesian<double> Kernel; 
typedef Kernel::Point_2 Point_2; 
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel2; 
typedef Kernel2::Point_2 Point_2_2; 

int main() 
{ 
    Point_2_2 p1(0, 0.3), q1(1, 0.6), r1(2, 0.9); 
    { 
    Point_2 p(0, 0.3), q(1, 0.6), r(2, 0.9); 
    std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n"); 
    } 
    { 
    Point_2 p(0, 1.0/3.0), q(1, 2.0/3.0), r(2, 1); 
    std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n"); 
    } 
    { 
    Point_2 p(0,0), q(1, 1), r(2, 2); 
    std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n"); 
    } 
    return 0; 
} 

Собран с Clang (x86 64-бит) и с Qt 5.4.1 clang 64-битная версия.