2011-08-27 11 views
20

WarchがGCCに渡している "-arch x86_64 -arch i386"フラグを抑制する必要があります。OSXでWafを使用してOpenGL/SDLアプリケーションをコンパイルするときに '-arch'、 'x86_64'フラグを抑制するにはどうすればよいですか?

私はSDL/Openglアプリケーションを構築しています。私は32ビットSDLランタイムにリンクした場合、私はエラー

Undefined symbols for architecture i386: 
    "_SDL_Quit", referenced from: 
     __del_video in SDL_functions.c.2.o 
     __init_video in SDL_functions.c.2.o 

を取得し、私は64ビットSDLランタイムにリンクする場合は、私はエラー「アーキテクチャx86_64のための未定義のシンボル」を取得

コンパイラが明らかにフラグ

を使用しています
-arch x86_64 -arch i386 

これは、OSX上でGCCが両方のアーキテクチャ用にコンパイルを試みることを理解します。 64ビット用にコンパイルするか、32ビット用にコンパイルするかのどちらかです。 1つのアーキテクチャのフラグを抑制するにはどうすればよいですか?

答えて

-1

他のフラグを抑制するためのコマンド/フラグを発行する方法がわかりません。ただし、64ビットまたは32ビットのみをコンパイルするには、それぞれ-m64または-m32を使用できます。どちらのアーキテクチャーでもコンパイルしているので、i386では-m64が機能しないため、-m32が唯一のオプションです。

+0

-m32は動作しません。それはまだそこに64ビットのフラグを追加します。私はsedコマンドを書いて64ビットのフラグを32ビットのフラグに変更しなければならず、64ビットのビルドを手に入れました。 強制的に64ビットのみにすることはできますか? – HaltingState

+1

私はあなたを理解しているか分からない。 arch_flagsをx86_64またはi386に設定すると、プロセッサフ​​ァミリを意味します。 m64またはm32フラグを設定すると、生成される命令が意味されます。 x86_64ファミリは、64ビットと32ビットの両方の命令を処理できます。あなたは、64ビットフラグ(正確に?)を32ビットに変更し、64ビットのビルドを得たと言っていますか? 64ビットのみが必要な場合は、i386フラグを使用しないでください。 – Jerry

+1

問題はwafがユーザーではなくこれらのフラグを追加していることです。ユーザーは-arch x86_64 – Mark

2

私の場合、ダブルアーチフラグはhere、具体的にはdistutils.sysconfig.get_config_var('LDFLAGS')です。これは、LDFLAGSを返すので、PythonはPythonモジュールをリンクするべきだと思っています。 Pythonはあなたは私の問題は、私は、Pythonにリンクするために必要なPythonのネイティブモジュールを構築し、別のライブラリたということでした-arch x86_64 -arch i386 -Wl,F.

とリンクする必要があると考えるので、私の場合は、file $(which python)は、「2つのアーキテクチャとマッハ-Oのユニバーサルバイナリ」であります両方のアーチで造られていなかった。両方のアーチを使用してモジュールをビルドすると、サードパーティのライブラリで両方のアーチが利用できなかったため、リンクが「シンボルが見つかりません」と失敗しました。

WAF unfortunately doesn't allow you to override its computed flags with your own flags, as Automake doesので、私は唯一の私のctx()オブジェクトを直接いじりによってこの問題を解決することができ、私のwscript

for var in ['CFLAGS_PYEMBED', 'CFLAGS_PYEXT', 'CXXFLAGS_PYEMBED', 
    'CXXFLAGS_PYEXT', 'LINKFLAGS_PYEMBED', 'LINKFLAGS_PYEXT']: 
    newvar = [] 
    for ix, arg in enumerate(ctx.env[var]): 
     if '-arch' not in (arg, ctx.env[var][ix - 1]): 
      newvar.append(arg) 
    ctx.env[var] = newvar 

(私も渡していたのでこれは、すべての-archフラグと関連する変数からその引数を削除します。私自身の-archフラグが私のCFLAGSにありますが、今は無効になりません。)

関連する問題