17

.la および .a ライブラリも --prefix パスにインストールせずに、autotools/libtool を使用して .so モジュールをビルドおよびインストールする方法は?

現在、私は次の Makefile.am を使用しています:

lib_LTLIBRARIES = libCurlDownloader.la
libCurlDownloader_la_SOURCES = Curl.cpp
libCurlDownloader_la_LDFLAGS = -module -avoid-version

動作しますが、libCurlDownloader.so に加えて、望ましくない libCurlDownloader.la と libCurlDownloader.a もインストールします。

更新 #1

いずれかを使用して、.a を生成しないようにすることができます。

./configure --disable-static

また

AC_ENABLE_SHARED(yes)
AC_ENABLE_STATIC(no)

configure.ac で

しかし、.so がインストールされている間に .la がインストール --prefix にインストールされないようにする方法は依然として問題です。

アップデート #2

--prefix を使用して、インストールから .la ファイルを削除することができます。

install-exec-hook: find $(DESTDIR)$(libdir) -type f -name \*.la -delete
4

2 に答える 2

4

.la必ずしもファイルを削除する必要はありません。.laファイルには、次の 2 つの状況で使用される情報が含まれています。

  1. ビルドされたライブラリに対して静的にリンクします。静的にリンクする (つまり、.aを使用する-static) 場合、リンクされるライブラリの依存関係に関する情報がないため、libtool は.laファイル内の情報を使用して、必要なすべての依存関係を参照する適切なldコマンドを作成できます。これは、再帰的な依存関係を解決するために、リンカーが特定の順序で指定された同じライブラリの倍数を必要とする MinGW のような環境では、より重要になることがよくあります。これは、静的バイナリをビルドする場合にのみ問題になります。

  2. 一部のプラットフォームでビルド ライブラリを動的にロードする(つまり、 lt_dlopenif using を使用libltdl)。同様に、特定のプラットフォームでは、コンパイル モジュールの依存関係がバイナリにエンコードされていないため、正しい依存関係を見つけてロードする.laためにファイルが必要です。lt_dlopenELF プラットフォーム (Linux を含む) および PE プラットフォーム (Windows など) では、依存関係はライブラリに保存されるため、ファイルlt_dlopenがなくても機能し.laます。MacOS の MachO 形式では、.laバンドルを構築するときにファイルが必要になる場合があります。

Debian/Ubuntu.laパッケージ作成者は、パッケージからファイルを除外することを決定しました。これは、2 番目の理由が Linux では適切ではなく、最初から静的バイナリをビルドしないことを望んでいるためです。libtool がサポートするように設計されている他のプラットフォームでは.la、プログラムをリンクまたは実行するためにファイルが必要になる場合があります。

于 2012-04-07T12:24:34.587 に答える
3

automake/libtool ではプラグインの用語である「モジュール」という用語を使用していたため、この質問に出くわしました。私は Finit にプラグイン システムを持っているので、.a ファイルを作成しないように「-module」を使用してプラグインをビルドします。しかし、私はまだ .la ファイルをインストールしています。

プラグインの .la ファイルをスキップする文書化された方法をまだ見つけていませんが、次のようにします。

AM_LDFLAGS = -module -avoid-version -shared
pkglib_LTLIBRARIES = alsa-utils.la bootmisc.la

install-exec-hook:
        @(cd $(DESTDIR)$(pkglibdir) && $(RM) $(pkglib_LTLIBRARIES))

明確にするために、私のユースケースでは、プラグイン .so に対して「リンク」する人は誰もいないため、.la ファイルは実際には役に立ちません。

于 2016-02-13T12:55:37.423 に答える