3

我不知道为什么,但在每个新版本的 CGAL 中,编译过程都会完全改变。因此,甚至不可能重新编译旧代码(6 个月大),因为它不再那样工作了。

坦率地说,我非常厌倦每次都重做我的项目的所有使用 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 的未来变化中存活下来的解决方案。

如果它可以帮助,这是我得到的那种错误:

在函数__gmpq_init'CGAL::Gmpq_rep::Gmpq_rep()':
main.cpp:(.text._ZN4CGAL8Gmpq_repC2Ev[_ZN4CGAL8Gmpq_repC5Ev]+0x14): undefined reference to

对于“__gmpg_add”、“__gmpq_sub”和“__gmpq_mul”等其他函数,我也会遇到此类错误。

SOLUTION: 您需要在编译指令中添加“-lgmp”。遗憾的是CGAL提供的makefile默认没有做到这一点!

4

2 回答 2

2

(已在评论和编辑中回答。请参阅没有答案的问题,但问题已在评论中解决(或在聊天中扩展)

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

于 2015-01-24T16:23:05.507 回答
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 install)

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

所有源 SRC = $(wildcard *.cpp) OBJ = $(addsuffix .o, $(basename $(SRC)))

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

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

wszystkie: $(PROGRAMY)
    @echo

clean:
    rm -f ./bin/*

mem: 01
    valgrind -v --tool=memcheck --leak-check=full ./01
于 2017-11-14T09:27:17.223 回答