2011-01-22 5 views
3

This question은 구멍이있는 다각형을 삼각형 화하는 가장 좋은 방법은 Shewchuk's Triangle library을 사용하지만 Mac OSX에서 컴파일하는 데 문제가 있음을 나타냅니다.Shewchuk의 삼각형 프로그램 용 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 
: 그것은이 내가지고있어 오류가 나는 C.

그냥 경험이있어, 따라서 잠시 동안 주변에하고있다 매우 인기있는 프로그램을 컴파일하기가 비교적 용이해야한다입니다

특정 플래그 (예 : #define LINUX 등)를 주석 처리하려고 시도하고 있지만 각 조합마다 다른 오류 집합이 표시됩니다.

누군가가 나를 단계별로 어떻게 Mac에서이 프로그램을 컴파일하고 (아마도) 호출 할 수 있을까요?

+0

삼각형의 정확한 산술 알고리즘은 부동 소수점 제어 단어에 대한 특별한 처리가 필요합니다. '__FPU_SETCW' 심볼은 8087 FPU의 사용을 제안합니다. 나는이 코드가 비교적 평이한 C 코드 (C++이 아니다)라고 믿고 이것이 유일한 블록이 아니라면 놀랄 것이다. FP 연산 (반올림 제어, 언더 플로우 제어, 예외 마스크 등)을 제어하는 ​​방법을 찾으려면 Mac C 컴파일러 설명서를 참조하십시오. –

+0

'xmmintrin.h '에서 필요한 옵션을 찾을 수있을 것 같습니다. 8087 setcw에서 SSE에 상응하는 값으로 매핑해야합니다. 분명히 SSE를 비활성화하고 Mac에서 8087을 사용하도록 강제 할 수는 있지만 올바른 접근 방식은 아닙니다. –

+0

'xmmintrin.h '를보고 있지만'__FPU_SETCW' 또는'FPU'에 대한 언급이 전혀 없습니다. 내가 줄을 써야한다고 말하는거야? – dsg

답변

0

필자는 이것이 표준 기능이라고 생각하지 않으며 Mac을 믿는다. Intel 아키텍처를 사용하는 SSE는 387 스타일 FPU 작업을 지원할 이유가 없었습니다.

그래서 코드는 Linux에 따라 다릅니다. 리눅스 특정 코드를 제거하거나 아무것도하지 않는 버전의 엔트리 포인트를 구현할 수 있습니다.

나는이에게 자신을하지 않을 것입니다,하지만 당신은 멀리로 얻을 수 있습니다 :

$ cat > /usr/include/fpu_control.h 

#define _FPU_SETCW(cw) // nothing 
#define _FPU_GETCW(cw) // nothing 

는 널 (null) 구현에 대해 걱정하지 마십시오. FPU 예외 및 반올림 모드를 조정할 필요가 없습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 같은 오류가 발생합니다. 아마도 이것은 fpu_control.h 파일이 속한 곳이 아닌 것입니까? – dsg

+0

Windows에서 triangle이 컴파일되어 Linux와 관련이 없습니다 –

+0

삼각형을 올바르게 작동 시키려면 FPU 예외 및 반올림 모드를 신중하게 제어해야합니다. 이것이이 코드가 코드에있는 이유입니다. –

4

fpu_control.h이 리눅스 특정 것으로 보이는 것처럼, 메이크 파일의 CSWITCHES의 정의에서 -DLINUX 플래그를 제거하여 OS X에서 컴파일 할 수있었습니다.

관련 문제