2012-01-08 3 views
3

Я не знаю почему, но в каждой новой версии CGAL процедура компиляции полностью изменяется. Таким образом, даже не возможно перекомпилировать старый код (6 месяцев), потому что он больше не работает.makefile для CGAL (libcgal8)

Я искренне очень устал переделывать все файлы моих проектов, которые используют CGAL каждый раз. На этот раз, для libcgal8, я не нахожу простой замены. Вот файл makefile, который я обычно использовал:

ifndef CGAL_MAKEFILE 
CGAL_MAKEFILE = /usr/local/cgal/share/cgal/cgal.mk 
endif 
include $(CGAL_MAKEFILE) 

LIBPATH = \ 
      $(CGAL_LIBPATH) 

LDFLAGS = \ 
      $(LONG_NAME_PROBLEM_LDFLAGS) \ 
      $(CGAL_LDFLAGS) 

COMP=-frounding-math -fopenmp -std=c++0x -l json -L$(LIBPATH) $(LDFLAGS) 
EXEC=../crender 

all: main.o 
    g++ -fPIC main.o $(EXEC) $(COMP) 

main.o: main.cpp ../common/common.hpp 
    g++ -c main.cpp $(COMP) -o main.o 

Итак, что мне нужно изменить, чтобы он снова работал? Если возможно, это решение, которое выдержит будущие изменения CGAL.

Если это может помочь, вот такая ошибка, что я получаю:

В функции CGAL::Gmpq_rep::Gmpq_rep()':
main.cpp:(.text._ZN4CGAL8Gmpq_repC2Ev[_ZN4CGAL8Gmpq_repC5Ev]+0x14): undefined reference to
__gmpq_init»

И я получаю такого рода ошибки для других функций, таких как„__gmpg_add“, «__gmpq_sub» и «__gmpq_mul».

РЕШЕНИЕ: Вам необходимо добавить «-lgmp» в инструкцию компиляции. Печально, что это не сделано по умолчанию с помощью make-файла, предоставленного CGAL!

+0

С января 2009 года (выпуск 3.4) CGAL использует систему cmake как систему сборки. С тех пор все флаги компилятора include/link предоставляются через механизм cmake (CGALConfig.cmake). – sloriot

+0

Как уже упоминалось выше, CGAL использует систему cmake как систему сборки. При компиляции примера CGAL с cmake я столкнулся с аналогичной проблемой. Решение состоит в том, чтобы добавить и связать библиотеку GMP. Вот как это делается для cmake: http: // stackoverflow.ком/вопросы/6975718/CMake основного библиотека сшивание-проблема/6980807 # 6980807 – sinner

ответ

2

(. Ответил в комментариях и в Edit См Question with no answers, but issue solved in the comments (or extended in chat))

ОП писал:

Вам нужно добавить "-lgmp" в инструкции по компиляции. Печально, что это не сделано по умолчанию с помощью make-файла, предоставленного CGAL!

@sloriot Добавлено:

С января 2009 года (релиз 3.4), CGAL использует CMake как система сборки. С тех пор все флаги компилятора include/link предоставляются через механизм cmake (CGALConfig.cmake).

Как уже упоминалось выше, теперь CGAL использует cmake как систему сборки. При компиляции примера CGAL с cmake я столкнулся с аналогичной проблемой. Решение состоит в том, чтобы добавить и связать библиотеку GMP. Вот как его сделали для CMake: Cmake basic library linking problem

1

Это мой Makefile для Linux и Mac OS X (не используя CMake):

CPP  := g++ 
OPCJE  := -W -Wall -pedantic -O0 -Wno-c++11-extensions 
BIBLIOTEKI := -lboost_math_c99 -lboost_thread -lm -lCGAL -lmpfr -lgmp 
PISZ := echo -e 
UNAME_S := $(shell uname -s) 

на Mac OS X некоторые библиотеки отличаются имя (заварить установки)

ifeq ($(UNAME_S),Darwin) 
BIBLIOTEKI = -lboost_math_c99 -lboost_thread-mt -lm -lcgal -lmpfr -lgmp 
PISZ = echo 
endif 

все исходные SRC = $ (подстановочные * .cpp) OBJ = $ (addsuffix .o, $ ($ базовое (SRC)))

BIN_DIR = ./bin 
W_ZRODLA = $(wildcard *.cpp) 
PROGRAMY = ${W_ZRODLA:%.cpp=$(BIN_DIR)/%} 

$(BIN_DIR)/%: %.cpp 
    @mkdir -p ./bin 
    $(CPP) $(OPCJE) $< -o [email protected] $(BIBLIOTEKI) 

wszystkie: $(PROGRAMY) 
    @echo 

clean: 
    rm -f ./bin/* 

mem: 01 
    valgrind -v --tool=memcheck --leak-check=full ./01