0

Mac OS X 10.8.2を使用しており、sconsコンパイラを使用してコードをコンパイルしています。32ビットのxerces-cデータベースバージョン2.8.0を使用しています。

ビルドしようとすると、エラーが発生します。

$ scons

scons:SConscriptファイルの読み取り..。
scons:SConscriptファイルの読み取りを完了しました。
scons:ターゲットの構築..。

ld:警告:ファイル/usr/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c.dylibを無視し、ファイルはサポートされていないファイル形式(0xce 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 0 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0)これはリンクされているアーキテクチャではありません(x86_64):/ usr / xerces-c_2_8_0-x86-macosx-gcc_4_0 / lib / libxerces-c.dylib

ld:アーキテクチャx86_64のシンボルが見つかりません
collect2:ldが1つの終了ステータスを返しました
scons:***[wntevo]エラー1
scons:エラーのためにビルドが終了しました。

libxerces-c.28.0.dylibファイルを確認しました。

$ file libxerces-c.28.0.dylib
libxerces-c.28.0.dylib:Mach-O動的リンク共有ライブラリi386

x86_64マシンのi386でビルドするには、SConstructファイルに何を追加する必要がありますか?

4

2 に答える 2

1

明確にするために、SConsはコンパイラではなくビルドツールです。SConsを使用してコンパイラーを呼び出し、編集しているソースからアプリケーションを構築する方法の詳細をSConsに任せます。

今のあなたの問題は、SConsが詳細についてあなたを助けることができないということです。SConsに、32ビットアプリケーションをコンパイルできる環境を作成するように指示する必要があります。これは、32ビットアプリケーションをコンパイルするようにコンパイラに指示するフラグをコンパイラに渡すことによって行われます。

コンパイラはgccであり、正しくコンパイラするにはフラグ-m32が必要だと思います。これを行うには、SConsにこれをコンパイラに通知するように指示できます。

SConstructファイルのどこかに、Environment()またはビルダーを呼び出す呼び出しがありProgram()ます。両方が見つかった場合は、プログラムの作成に使用される環境を変更します。したがって、コードに次のように記載されていてenv = Environment(...)、後でenv.Program(...)環境行を変更してこの引数を追加する場合は、次のようになります。

env = Environment(...other arguments..., CPPFLAGS=["-m32"])

次のようにプログラムビルダーを呼び出します。

Program(...0 or more arguments...)

次のように変更する必要があります。

Program(...0 or more arguments..., CPPFLAGS=["-m32"])

g ++の引数の中にオプション-m32が表示されるはずなので、SConsを実行するとこの変更が表示されます。

ちなみに、コンパイラとビルドツールについての混乱を防ぐために、SConsについて少し読んでおくことをお勧めします。まず、manページを使用することをお勧めします。

于 2013-01-31T08:42:51.783 に答える
-1

これは、scons を使いたいときに 32 ビット アーキテクチャでコンパイルするために使用するものです。

env = Environment(TARGET_ARCH = 'x86')

于 2013-02-26T20:07:25.143 に答える