web-dev-qa-db-ja.com

コンパイル時に互換性のないライブラリをスキップする

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

私は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ビットですか?

31
kelly.dunn

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

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

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

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

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

32
psmears

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

したがって、/dvlpmnt/libPI-Http.aが32ビットオブジェクトファイルまたは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'ステップは、アーカイブ内のオブジェクトファイルのタイプを示します。残りは、簡単にクリーンアップできない混乱を作らないようにするだけです。

11