2012-01-08 53 views
3

我不知道爲什麼,但是在CGAL的每個新版本中,編譯完全更改的過程。所以,甚至不可能重新編譯舊的代碼(6個月),因爲它不再像那樣工作。用於CGAL的生成文件(libcgal8)

坦率地說,我非常厭倦重做每次使用CGAL的項目的所有makefile。這一次,對於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」。很遺憾,它不是由CGAL提供的makefile默認完成的!

+0

自2009年1月(版本3.4)起,CGAL將cmake用作構建系統。此後,所有包含/鏈接編譯器標誌都通過cmake機制(CGALConfig.cmake)提供。 – sloriot 2012-01-09 10:06:35

+0

如上所述,現在CGAL使用cmake作爲構建系統。在用cmake編譯CGAL示例時,我遇到了類似的問題。解決方案是添加和鏈接GMP庫。以下是它爲cmake完成的操作:http:// stackoverflow。COM /問題/ 6975718/cmake的,基本庫聯-問題/ 6980807#6980807 – sinner 2013-11-25 13:19:21

回答

2

(評價和在編輯回答見Question with no answers, but issue solved in the comments (or extended in chat)

的OP寫道:

你需要在編譯指令添加 「-lgmp」。很遺憾,它不是由CGAL提供的makefile默認完成的!

@sloriot補充:

自2009年1月(3.4發行),CGAL是使用cmake作爲構建系統。此後,所有包含/鏈接編譯器標誌都通過cmake機制(CGALConfig.cmake)提供。

如上所述,現在CGAL使用cmake作爲構建系統。在用cmake編譯CGAL示例時,我遇到了類似的問題。解決方案是添加和鏈接GMP庫。下面是它的cmake如何做:Cmake basic library linking problem

1

這是我對Linux和Mac OS X的makefile(不使用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中的一些庫有不同的名稱(BREW安裝)

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