OSX(Mountain Lion)でYap Prologの最新の開発バージョンをコンパイルしようとしています。初めて試したとき、次のメッセージが表示されました。
##################################################################
# ERROR: Could not find library archive (-larchive). Dropped
# library(archive). Library archive is available from
# http://code.google.com/p/libarchive/
#
# Most Unix/Linux distributions are shipped with binaries. Make
# sure to have the development library installed. E.g.
#
# Debian/Ubuntu/Mint: aptitude install libarchive-dev
# Fedora/... yum install libarchive-devel
# MacOS (Macports): port install libarchive
##################################################################
そのため、提案されているように、Macポートを使用してlibarchiveをインストールしましたsudo port install libarchive
。成功したインストール。
ただし、再コンパイル後もlibarchiveが見つからないというメッセージが表示され続けます。私のシステムでlibarchiveファイル/opt/local/lib/libarchive.dylib
を見つけました/opt/local/lib/libarchive.2.dylib
。DYLD_LIBRARY_PATH
/opt/local/lib
この問題をどのように解決できるかを知っている人はいますか?
答え1
-devel パッケージには通常、ヘッダーファイル、pkgconfig データ、および類似のファイルが含まれます。必要なものは何でも含まれます。協会関連ライブラリのアプリケーションです。ポートがどのように機能するかはよくわかりませんが/opt/local
(または/opt/local/include
)archive.h
とarchive_entry.h
。これらのファイルがないと、アプリケーションをコンパイルできません。パスがやや非標準的なように聞こえるので、(/opt/local/...
)ライブラリとヘッダーファイルがその特定のディレクトリから検索されるべきであることをビルドシステムに知らせる必要があるかもしれません。
今日、UNIXシリーズシステムの基本的な共通ファイルレイアウトは次のとおりです。ファイルシステム階層標準。最も重要な部分は次のとおりです。
PREFIX
|-- bin
|-- etc
|-- include
|-- lib
|-- sbin
`-- share
bin
バイナリ(実行するプログラム)を保持しますsbin
。これは、これらのディレクトリが通常$PATH
シェル変数で参照される理由です。 in は、以下を表すためにs
使用されます。sbin
変化のない静的にリンクされたバイナリと同様に、動的接続は必要なく、デフォルトでは「現状のまま」実行されます。lib
(および/またはlib64
)lib32
共有(静的かもしれません)ライブラリを保存するinclude
コードをライブラリ(デフォルトではAPI定義)に関連付けるヘッダファイルが含まれています。etc
share
データファイルの設定と添付に使用されます。PREFIX
通常、これは/usr
、またはです/usr/local
が、ホームディレクトリにこれらの構造を作成することもできます。/opt
/opt/<something>
バイナリを見つける場所をビルドシステムに知らせる方法は、コードで使用されるbsによって異なります。通常、このタイプの情報はソースコードに付属のREADME
ファイルに保存されます。たとえば、GNU autotoolsの場合、通常はINSTALL
スクリプトに渡される引数の形式を取ります。これが利用できない場合は、コンパイラとリンカが使用する変数を明示的にエクスポートする必要があります。--with-name=PREFIX
--with-name-lib=PREFIX/lib --with-name-include=PREFIX/include
configure
$ export CFLAGS="-IPREFIX/include $CFLAGS"
$ export LDFLAGS="-LPREFIX/lib $LDFLAGS"
-I/opt/local/include
あなたの場合、これはそれぞれとです-L/opt/local/lib
。