2011-01-22 2 views
3

This questionは、穴でポリゴンを三角形分割する最良の方法はShewchuk's Triangle libraryを使用することを提案していますが、Mac OSXでコンパイルできません。これは、しばらくの間、回避されている非常に人気のプログラムであるため、コンパイルすることは比較的容易である必要があり、私はこれは私が得ているエラーであるC.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 

私は特定のフラグ(すなわち#define LINUXなど)をコメントアウトしようとしていますが、それぞれの組み合わせに対して異なるセットのエラーが発生します。

誰かがステップバイステップでMacでこのプログラムをコンパイルする(そして、おそらく呼び出す)方法を教えてくれますか?

+0

私が思い起こすように、三角形の厳密な算術アルゴリズムは、浮動小数点制御ワードの非常に特別な処理を必要とします。 '__FPU_SETCW'シンボルは、8087 FPUの使用を示唆しています。私はコードが比較的単純なCコード(それはC++ではありません)と考えています。これがあなたの唯一のブロックでないなら、私は驚くでしょう。私はFP演算(丸め制御、アンダーフロー制御、例外マスクなど)を制御する手段を見つけるために、Mac Cコンパイラのドキュメントを参照することをお勧めします。 –

+0

'xmmintrin.h'に必要なオプションがあります。あなたは8087 setcwからSSEに相当するものにマップする必要があります。明らかにSSEを無効にして8087をMac上で使用することはできますが、私にとっては正しいアプローチのようには思えません。 –

+0

私は 'xmmintrin.h'を見ていますが、' __FPU_SETCW'や 'FPU'の記述はまったく含まれていません。私はいくつかの行を追加しなければならないと言っていますか? – dsg

答えて

0

私はそれが標準的な機能だとは思っていません。いずれにしても、Intelのアーキテクチャーを使用していたMacは、387スタイルのFPUオペレーションをサポートする理由は決してありませんでした。

あなたのコードはLinux固有のものです。 Linux固有のコードを削除するか、何もしないバージョンのエントリポイントを実装することができます。

私はこれを自分でしないだろう、しかし、あなたが逃げるかもしれません:ヌルの実装を心配しないでください

$ cat > /usr/include/fpu_control.h 

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

。 FPU例外と丸めモードを微調整する必要はありません。

+0

迅速な対応に感謝します。同じエラーが発生しています。おそらく、これはfpu_control.hファイルが属する場所ではないでしょうか? – dsg

+0

Windows上でtriangleがコンパイルされるため、Linux固有のものではありません –

+0

三角形を正しく操作するには、FPUの例外と丸めモードを慎重に制御する必要があります。そのため、このコードはコード内に存在します。 –

4

私は、fpu_control.hがLinux特有のように、フラグをmakefileのという定義から削除することによってOS Xでコンパイルすることができました。

関連する問題