2010-12-06 7 views
1

OpenSync 0.4(0.3.9実際)依存関係でアプリケーションを構築しようとしています。autoconf内で異なる名前のライブラリを使用する

プロジェクトのconfigure.acでは、opensyncライブラリはlibopensync1と書かれています。しかし、これは私のGentooシステム上にはありません。 libopensync1からlibopensyncに変更すると、問題が解決します。

Googleで検索したところ、一部のディストリビューションではlibopensync1が使用されていましたが、他のエディションではlibopensyncでした。では、configure.acでこの問題を解決するにはどうすればよいですか?

ありがとうございました。

答えて

2

configure.acの内部でこれが発生する場所がPKG_CHECK_MODULESコール内にあるとします。

libopensyncソースを見ると、libopensync1が新しい名前で、libopensyncが古い名前であるようです。したがって、が存在しない限り、新しい名前を探すためにpkg-configマクロを使用します。

あなたconfigure.acでこれを入れて:

# Check if libopensync1 is known to pkg-config, and if not, look for libopensync instead 
PKG_CHECK_EXISTS([libopensync1], [OPENSYNC=libopensync1], [OPENSYNC=libopensync]) 

を次に後でPKG_CHECK_MODULES呼び出しで、$OPENSYNClibopensync1を交換してください。

+0

で位置していたものは何でもしてデータを検証するために AC_CHECK_LIBまたはAC_SEARCH_LIBSへの呼び出しでそれをフォローアップ、ありがとうこれは私にとって非常にうまく動作します。 –

4

マクロAC_SEARCH_LIBSは必要な処理を行います。 (PKG-config設定がこれまでに使用する必要があるかどうかについては多くの白熱した議論がありますが、それに依存することを選択した場合、ptomatoは、合理的なアプローチを提供します。。)単にあなたのconfigure.acにこれを追加します。

 
AC_SEARCH_LIBS([osync_mapping_new],[opensync1 opensync],[], 
    [AC_MSG_ERROR([can't find opensync])]) 

この最初にopensync1という名前のライブラリを探します。 が見つからない場合は、opensyncが検索されます。

のpkg-config設定を使用する主な欠点は、それに依存している ほとんどのプロジェクトが実際.PC ファイルによって提供されたデータが信頼できるかどうかをチェックするので、設定成功するかもしれないが、それ以降のビルド が失敗していないということです。 configureを実行するときにPKG_CONFIG = true を設定し、関連付けられた.pcファイルによって提供されるすべてのデータ を完全に削除し、LIBS、CFLAGSなどを で設定することは、常に「古風」のやり方で行うことが可能です。

pkg-configを使用しない主な欠点は、ユーザ がLIBS、CFLAGSなどを旧式の方法で設定する必要があることです。実際には、 これはかなり簡単です。すべてのpkg-configが完了すると、単一のCONFIG_SITEファイルの データを、各パッケージの別々の .pcファイルに移動します。あなたがPKG_MODULE_CHECKを使用する場合

、 .PCファイルはPKG_CHECK_MODULES

関連する問題