1. ホーム
  2. c++

[解決済み] コンパイル時の非互換ライブラリのスキップ

2022-02-16 10:12:10

質問

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

他の様々なサイトを見ると、私はUbuntuの64bitディストロで開発しており、サーバー版は32bitで動いていると思われるので、これは環境の問題かもしれないと思いました。 それでも、環境変数を設定したところ、以下のようになりました。

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

のコンパイルエラーは相変わらずです。

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

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

== 編集 ==

Jonathanのアドバイスに従ったところ、このような出力が得られました。

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

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

解決方法は?

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

もちろん、以下のようなエラーが発生した場合は、その内容を確認してください。 can't find lPI-Http ということで、問題ありです :-)

ビルドシステムとメイクファイルの詳細がわからないと、正確な解決策を提案するのは難しいのですが、暗闇の中の2つのショットを紹介します。

  1. 一応確認しておくと、通常は フラグを CFLAGS よりも、むしろ CTAGS - で間違いないでしょうか? をご覧ください。(あなたが持っているものは正しいかもしれません - これはあなたのビルドシステムに依存します!)
  2. 多くの場合、このフラグはリンカーにも渡される必要があります。 LDFLAGS

それでもだめなら、エラー出力と実際のコマンド(例. gcc foo.c -m32 -Dxxx など)実行されましたか?