2009-08-11 6 views
0

参照this questionコンパイルについて。私のMac用プログラムでは右の-archを使う方法、-archのフラグでコンパイルする方法、-archのフラグを私が使っているシステム(ppc64 g5)にする方法、そして間違ったオブジェクトコードを生成する方法は分かりません。誤ったシステムとクロスコンパイルのためにオブジェクトコードをコンパイルするにはどうしたらいいですか?

また、私がクロスコンパイラを使ってLinux上にあって、Mac用の10.5コードを作成した場合、これは私が上で説明したものとどう違うのでしょうか?

背景私はさまざまなApacheモジュールをコンパイルしようとしています。彼らは-arch ppc、ppc64などでコンパイルします。エラーはなく、私は自分のmod_whatever.soを取得します。しかし、apacheは常にいくつかのシンボルが見つからないと不平を言うでしょう。どうやら、それはファイルの種類がppc、ppc64、i386、x_64(ユニバーサルバイナリ)であると言っていても、コンパイラが生成するものと関係があり、私が持っている他のすべての.so modと一致するようです。

私のシステムで問題なくコンパイルできる方法は分かりませんし、私のシステムでは使用できないと言います。たぶん私はコンパイラが実際に私に与えるものを理解していないかもしれません。

EDIT:すべてのエラーメッセージと完了プロセスはhereで表示されます。

ありがとうございます。

+0

より具体的にする必要があります。まさにどのようなエラーメッセージが表示されていますか? –

答えて

1

他のスレッドやG5やOSX Serverがインストールされていない状態では、私はいくつかのコメントや提案をすることができますが、おそらくそれらは役に立ちます。

  1. o/sベンダーのインストール済みソフトウェアを変更することは一般的にはお勧めできません。新しいApacheモジュールをインストールすることは、既存のライブラリを上書きすることよりも問題は少なくなりますが、ソフトウェア・アップデートによって修正が削除され、ベンダーのバージョンがどのように変更されたのか把握しなければならないという点で、最初に建てられた。 OS Xの世界での一般的なプラクティスは、Apacheなどのオープンソース製品を、例えばMacPortsを使用して完全に別の場所にインストールすることによってこれを避けることです。 MacPortsは高レベルの独立性を達成するために、すでにOS Xに入っているもののためにたくさんの依存パッケージをダウンロードしてビルドすることがありますが、余分なビルドサイクルやディスクスペース以外に害はありません。

  2. つまり、Appleが提供するものを補うためのApacheモジュールをビルドしてインストールすることが可能であるはずです。 Appleはソース製品を開くための変更を公開していますhere;そこにあるさまざまなバージョンをドリルダウンして、ソース、Makefile、および適用されたパッチを含むapacheディレクトリを見つけることができます。それは助けになるかもしれない。

  3. ビルドするためのmod _ *が本当に64ビットであり、64ビット以外のライブラリに依存していないことを確認してください。 otool -L mod_*.soを使用して、それぞれ参照するダイナミックライブラリを確認し、それらのライブラリにfileを使用して、すべてがppc64バリアントを持つようにします。

  4. 最新の開発ツール(Xcode 3.1.3が最新)を使用していることを確認してください。

  5. Appleは多くのオープンソースコンポーネントを使用していますが、Appleはそれらの多くを強化しており、OS XのABI、ユニバーサルバイナリサポート、ダイナミックライブラリなどに大きな違いがあります。 Linux(または他のOS X以外のプラットフォーム)上のOS Xターゲットオブジェクトコードは、サポートも実用的でもありません。

関連する問題