2

私はディレクトリ構造を持っています

トランク

--lib--libParser.a

--オブジェクト

--src

--メイクファイル

次のメイクファイルがあります

CRYPTOLIB_TARGET = cryptolib.a 

LOCALLIBS = ./objs
LOCALLIBS_IMAGE = ./cryptolib.a
CC = gcc
AR = ar
DEBUG_FLAGS = 
LDEFSECOM_LOG_VERSION = -DSECOM_LOG_VERSION
CMPL_TIME_MACROS = -DENBL_DEBUG_PRINTF $(LDEFSECOM_LOG_VERSION)
ALLWARN = 
ALL_INCS = -I./src/INCLUDE
LIBS = -lrt -laio -lrt -lpthread -lm -lpq -ldl

LINK = $(CC) $(DEBUG_FLAGS) $(CMPL_TIME_MACROS) $(ALLWARN) $(ALL_INCS) $(LIBS) -c

default = CRYPTOLIB_TARGET

CRYPTOLIB_OBJ =             \
$(LOCALLIBS)/AES_crypt.o    \
$(LOCALLIBS)/bigdigits.o    \
$(LOCALLIBS)/DataEncryption.o   \
$(LOCALLIBS)/SiaEncryption.o

$(CRYPTOLIB_TARGET): $(CRYPTOLIB_OBJ)
$(AR) r $(CRYPTOLIB_TARGET) $(CRYPTOLIB_OBJ)

$(LOCALLIBS)/AES_crypt.o : \
src/AES_crypt.c
mkdir -p ./objs
$(LINK) src/AES_crypt.c -o $(LOCALLIBS)/AES_crypt.o

$(LOCALLIBS)/bigdigits.o : \
src/bigdigits.c
$(LINK) src/bigdigits.c -o $(LOCALLIBS)/bigdigits.o

$(LOCALLIBS)/DataEncryption.o : \
src/DataEncryption.c
$(LINK) src/DataEncryption.c -o $(LOCALLIBS)/DataEncryption.o

$(LOCALLIBS)/SiaEncryption.o : \
src/SiaEncryption.c
$(LINK) src/SiaEncryption.c -o $(LOCALLIBS)/SiaEncryption.o

clean:
rm -rf objs
rm -rf cryptolib.a

作成中の出力ライブラリに libParser.a を含めたいのですが、その方法がわかりません。ライブラリ (libParser.a) を含めて、cryptolib.a を最終的な出力ライブラリとして作成できるように、ポインタを教えてください。

4

1 に答える 1

1

gcc オンライン ドキュメントから:

-図書館

-l ライブラリ

...(テキスト削除)...

通常、この方法で検出されたファイルはライブラリ ファイル (メンバーがオブジェクト ファイルであるアーカイブ ファイル) です。リンカーは、アーカイブ ファイルをスキャンして、これまでに参照されたがまだ定義されていないシンボルを定義するメンバーを探して処理します。ただし、見つかったファイルが通常のオブジェクト ファイルである場合は、通常の方法でリンクされます。-l オプションを使用する場合とファイル名を指定する場合の唯一の違いは、-l はライブラリを「lib」と「.a」で囲み、いくつかのディレクトリを検索することです。

だから...あなたはライブラリインクルードフォルダを指定することができます:

-L./lib

libParser.a をライブラリのリストに入れます (「lib」と「.a」を差し引いて):

-lParser -lrt -laio ...
于 2013-07-20T03:37:11.810 に答える