13

autoconf、automake、および libtool を使用してプログラムを作成しています。私の仕事では、(ほとんどの) ライブラリを静的にリンクする必要があります。-all-static. _ 動的のみのライブラリを使用する必要があるため、これは問題です。第三者から提供されたものであり、ソースはありません。

もちろん、-all-static今ではビルドが失敗します。この1つのライブラリを除いて、libtoolにすべてを静的にリンクするように指示することは可能ですか? libtool に静的リンクと動的リンクの任意の組み合わせを実行させることは可能ですか?

これまでのところLDFLAGS = -static、静的にリンクしたいライブラリに依存する便利なライブラリを作成しようとしました。しかし、私が望んでいたように、libtool は静的ライブラリを連結しません。便利なライブラリに依存するプログラムは、依然としてすべてを動的にリンクします。

も試しまし--disable-sharedたが、ビルドには影響しませんでした。


これらの質問は似ていますが、実際には私の質問には答えていません:

Libtool を使用して静的ライブラリを共有ライブラリに強制的にリンクする

すべてではないが一部のライブラリを libtool で静的にリンクすることは可能ですか?

(システムから共有ライブラリを削除したくありません。また、すべてのパスを完全に指定することは、手動でリンクするよりも優れているとは言えませんが、それが唯一の方法かもしれません。)

4

2 に答える 2

12

オペレーティング システムは指定されていませんが、比較的最近の Unix/Linux/OSX であると仮定します。そうでない場合は、次の警告を無視してください。

答える前に、ほとんどの ELF ベースのシステム (Unix/Linux) で静的コードと共有コードを混在させると問題があることを知っておく必要があります。1 つの理由は、更新された依存関係を再リンクするのを忘れると、コードが同期しなくなる可能性があるためです。もう 1 つは、静的コードとPICの性質によるものです。これが、libtool がそれを思いとどまらせようとする理由です。

そうは言っても、 Makefile.am で(最終的なプログラムがfooあり、共有ライブラリがあると仮定して):

    .
    .
    .
    foo_SOURCES = foo.c abc.c def.c hij.c
    foo_LDFLAGS = -all-static -Wl,-Bdynamic,-L/path/to,-lshared,-Bstatic
    foo_LDADD = -L../path/to -lbar -lbaz

ここで重要なのは、libtool を使用すると、リンカー (GNU ld) に引数を直接-static渡すことで、チェックと GNU gcc のフラグ (libtool によって使用される) を短絡できることです。-Wl,引数の間にスペースを入れるには、コンマ,区切り文字を使用します。

-Bstaticとの両方-Bdynamicが、GNU ld の情報ページとヘルプ画面に記載されています。繰り返しますが、使用されている os またはコンパイラ パッケージについて言及されていないため、Linux では GNU gcc および GNU ld を想定しています。を使用ld --helpして確認することをお勧めします。なんらかの理由で GNU ld でない場合は、 および と同等のフラグを見つけて、必要に-Bstatic応じて-Bdynamic置換する必要があります。

于 2012-12-25T03:45:52.893 に答える
0

私の場合labA、静的にリンクしたかったのですが、pthread動的にリンクしました。asに追加libAするMakefile.am

my_proc_LDADD = -Wl,-Bstatic -lA -Wl,-Bdynamic

lddリンクできませlibAん 。libAで指定する必要がありますがLDADD、autotools では許可されていません。

Makefile.am LDADDコメントとして追加すると

#my_proc_LDADD = -Wl,-Bstatic -lA -Wl,-Bdynamic

次に、コメントとして結果にも追加されるため、スクリプトMakefileの後にこの文字列のコメントを外すだけです。configure

./configure
sed -i -e 's/#my_proc_LDADD/my_proc_LDADD/g' ./src/Makefile
make

その結果、静的にリンクされlibAたものが追加されますLDADD

于 2019-11-02T19:14:55.483 に答える