44

プロジェクトのコピーをローカルマシンでコンパイルしようとすると、互換性のないライブラリをスキップしているというエラーが表示されます。これは、稼働中のサーバーでホストされているライブバージョンをいじっている場合には当てはまりません[完全にそこになります]。

私はUbuntuの64ビットディストリビューションで開発しており、サーバーバージョンは32ビットで実行されていると想定しているため、他のさまざまなサイトから、これは環境の問題である可能性があると思われます。それでも、環境変数を次のように設定した後:

CFLAGS+=" -m32"
CXXFLAGS+=" -m32"

私はまだ同じコンパイルエラーを受け取ります:

/usr/bin/ld: skipping incompatible /dvlpmnt/libPI-Http.a when searching for -lPI-Http

チュートリアルはできますか?

==編集==

これは、ジョナサンのアドバイスに従ったときに受け取った出力です。

http.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

どうやら、問題のライブラリは結局32ビットですか?

4

2 に答える 2

46

このメッセージは実際にはエラーではありません。問題のファイルが正しいアーキテクチャではないことを警告するだけです(たとえば、32ビットと64ビット、間違ったCPUアーキテクチャ)。リンカは、適切なタイプのライブラリを探し続けます。

もちろん、の線に沿ってエラーが発生しているcan't find lPI-Http場合は、問題があります:-)

ビルドシステムとメイクファイルの詳細を知らずに正確な救済策を提案するのは難しいですが、ここに暗闇の中でのいくつかのショットがあります:

  1. 確認するだけです。通常、フラグを追加するのCFLAGSではなく、 フラグを追加しCTAGSます。これが正しいかどうかを確認しますか?(あなたが持っているものは正しいかもしれません-これはあなたのビルドシステムに依存します!)
  2. 多くの場合、フラグもリンカーに渡す必要があります。そのため、変更が必要になる場合もあります。LDFLAGS

それでも問題が解決しない場合は、完全なエラー出力に加えて、gcc foo.c -m32 -Dxxx実行されていた実際のコマンド(例など)を投稿できますか?

于 2010-06-25T16:39:09.190 に答える
16

通常、それ自体はエラーではありません。-lPI-Httpコンパイラ/リンカの引数に一致する最初のファイルが無効であることが警告されます。このエラーは、適切なコンテンツを持つ他のライブラリが見つからない場合に発生します。

したがって、/dvlpmnt/libPI-Http.a32ビットオブジェクトファイルのライブラリなのか64ビットオブジェクトファイルのライブラリなのかを確認する必要があります。この-m32オプションを使用してコンパイルする場合は、64ビットになる可能性があります。次に、 32ビットの代替ファイルlibPI-Http.aまたはファイルがあるかどうかを確認する必要があります。libPI-Http.soその場合は、それを含むディレクトリが-L/some/whereリンカの引数にリストされていることを確認してください。そうでない場合は、どこかからライブラリの32ビットバージョンを取得または構築する必要があります。

そのライブラリにあるものを確立するには、次のことを行う必要があります。

mkdir junk
cd junk
ar x /dvlpmnt/libPI-Http.a
file *.o
cd ..
rm -fr junk

' file'ステップは、アーカイブにあるオブジェクトファイルのタイプを示します。残りは、簡単にクリーンアップできない混乱を起こさないようにするだけです。

于 2010-06-25T16:36:50.347 に答える