2017-10-15 4 views
0
  1. 私は静的ライブラリを生成するためにgnu makefileを作ろうとしています。共有ライブラリからいくつかの関数が必要なので、makefileに共有ライブラリをリンクします。 `fooo '
  2. 私はまた、コンパイルログに気づい-lshared_lib

次のフラグメントは、私はメイクgnuメイクファイルの共有ライブラリに対する静的ライブラリリンクを実行できますか?

.cpp.o: 
    $(CC) $(CFLAGS) $(DEBUGFLAG) $(WARNING) -lshared_lib -c $*.cpp 

all: $(LIB_NAME) 
$(LIB_NAME) : $(OBJS) 
    $(rm) [email protected] 
    $(AR) [email protected] $(OBJS) 
    $(RANLIB) [email protected] 

答えて

1

さて、最初のことができない「リンク」静的に書いたものですが見つかりません全くライブラリ。上記のようにアーカイバ(ar)を使用すると、静的ライブラリを生成するためにリンカを使用しません。

静的ライブラリはリンクされていないため、共有ライブラリをリンクすることはできません。静的ライブラリはオブジェクトファイルの束ねられたセットです(オブジェクトファイルを含むtarファイルのように、目次(シンボルマップ)が追加されていると考えることができるので、共有ライブラリを参照することはできません)。

あなたの静的ライブラリが共有ライブラリがスタティックライブラリにリンクしプログラムリンクラインにリストされなければならないことを、その後、いくつかの共有ライブラリにある関数を使用したい場合。

メイクファイルにこのようなレシピがある必要があります。そうしないと、未定義の参照に関するエラーが表示されません。スタティックライブラリの作成時に参照は評価されません。arコマンドはすべての参照を解決しません。作成時にエラーが発生しません。参照はリンク時にリンカによってのみ展開されます。私たちはmakefileの一部を使用できないので、それを修正する方法についてあなたにアドバイスすることはできません。

関連する問題