【发布时间】:2011-01-22 07:59:30
【问题描述】:
This question 建议对带孔的多边形进行三角剖分的最佳方法是使用Shewchuk's Triangle library,但我无法在我的 mac OSX 上编译它。这是一个非常流行的程序,已经存在了一段时间,因此应该比较容易编译,我只是对 C 缺乏经验。
这是我得到的错误:
$ make
cc -O -DLINUX -I/usr/X11R6/include -L/usr/X11R6/lib -o ./triangle ./triangle.c -lm
Undefined symbols:
"__FPU_SETCW", referenced from:
_exactinit in ccrEJvxc.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [triangle] Error 1
我正在尝试注释掉某些标志(即#define LINUX 等),但每种组合都会出现一组不同的错误。
有人可以逐步指导我如何在 Mac 上编译(并可能调用)这个程序吗?
【问题讨论】:
-
我记得,三角形的精确算术算法需要对浮点控制字进行非常特殊的处理。
__FPU_SETCW符号表示使用 8087 FPU。我相信代码是相对简单的 C 代码(顺便说一下,它不是 C++),如果这不是您唯一的障碍,我会感到惊讶。我建议您查阅 Mac C 编译器文档以了解控制 FP 操作(舍入控制、下溢控制、异常掩码等)的方法 -
我想你会在
xmmintrin.h中找到你需要的选项。您需要从 8087 setcw 映射到 SSE 等效项。显然您可以禁用 SSE 并在 Mac 上强制使用 8087,但这对我来说听起来不是正确的方法。 -
我正在查看
xmmintrin.h,但它根本不包含__FPU_SETCW或任何提及FPU。你是说我必须添加一些行吗? -
不,它不包含 FPU_SETCW。您首先需要了解 8087 控制字设置,然后将其映射到 SSE 中的等效项,如 xmmintrin.h 中所示。
标签: c macos compilation