2017-03-17 29 views
3

は、以下の構造で-lrfc7539 と呼ばれる:私はその後、.soファイル を作成するには、このコマンドgcc -shared -o lrfc7539.so *.oを行うC共有ライブラリの問題

rfc7539.o: rfc7539.c chacha20poly1305.o 
    $(CC) $(CFLAGS) -c -o [email protected] $< 

chacha20poly1305.o: chacha20poly1305.c chacha20.o poly1305.o 
    $(CC) $(CFLAGS) -c -o [email protected] $< 

chacha20.o: chacha_merged.c 
    $(CC) -fPIC $(CFLAGS) -c -o [email protected] $< 

poly1305.o: poly1305-donna.c 
    $(CC) -fPIC $(CFLAGS) -DPOLY1305_16BIT -c -o [email protected] $< 

rfc7539_test: rfc7539.o chacha20poly1305.o poly1305.o chacha20.o 

.PHONY: clean 

clean: 
    @rm -f *.o 
    @rm -f rfc7539_test 

に私のメイクのためのより良い練習がありますこれを自動的に行うことができますか?

答えて

2

あなたが与えたgccコマンドを実行するmakefileにターゲットを作成する必要があります。このライブラリは、メイン出力の場合は、中を指すallターゲットを作る

all: lrfc7539.so 

lrfc7539.so: rfc7539.o chacha20poly1305.o chacha20.o poly1305.o 
    gcc -shared -o [email protected] *.o 
+0

ありがとう:

はここ(GNU Makeを想定して)完全なMakefileのです。 – yrekik

+0

@YoussefRekik喜んで私は助けることができます。あなたが役に立つと思ったら、[この回答を受け入れる](http://stackoverflow.com/help/accepted-answer)を自由に感じてください。 – dbush

2

あなただけでは、目標とルールを作ることができます。

librfc7539.so: rfc7539.o chacha20poly1305.o poly1305.o chacha20.o 
    $(LINK.c) $(OUTPUT_OPTION) -shared $^ $(LOADLIBES) $(LDLIBS) 

私は(あなたが更新できmake --print-data-baseからコマンドをコピーあなたの他のコマンドも同様です)。 LDFLAGS-fPICを追加する必要があります。

私はあなたのライブラリlibrfc7539.so-lrfc7539を使ってリンクできるように電話しました。あなたが望むものだと思います。


私はそれが明示的にリンクする予定のオブジェクト・ファイルを指定することがベストプラクティスだと考えているが、いくつかは、すべてのソースファイルをコンパイルしてリンクする必要があることを前提としたい:

sources := $(wildcard *.c) 
librfc7539.so: $(sources:.c=.o) 

これが動作しませんコンパイルされたソースファイルの名前を別の名前のオブジェクトファイルに変更しない限り、あなたのためのものです。


私は、あなたのオブジェクトファイルが他のオブジェクトファイルに依存するのは奇妙なことに注意してください。そうではありませんが、ヘッダファイルに依存する必要があります。これは私がすべての日を探していた答えである

CFLAGS += -Wall -Wextra 
CFLAGS += -fPIC 

LDFLAGS += -fPIC 

%.so: LDFLAGS += -shared 

all: rfc7539_test librfc7539.so 

librfc7539.so: rfc7539.o chacha20poly1305.o poly1305.o chacha20.o 
    $(LINK.c) $(OUTPUT_OPTION) $^ $(LOADLIBES) $(LDLIBS) 

rfc7539_test: rfc7539.o chacha20poly1305.o poly1305.o chacha20.o 
    $(LINK.c) $(OUTPUT_OPTION) $^ $(LOADLIBES) $(LDLIBS) 

# Default %.o:%.c rule works, except for these files with misnamed sources: 

chacha20.o: chacha_merged.c 
    $(COMPILE.c) $(OUTPUT_OPTION) $< 

poly1305.o: poly1305-donna.c 
    $(COMPILE.c) $(OUTPUT_OPTION) $< 

# Specific flags for this source file 
poly1305.o: CFLAGS += -DPOLY1305_16BIT 

.PHONY: clean 

clean: 
    @$(RM) *.o 
    @$(RM) rfc7539_test 

.DELETE_ON_ERROR: 
関連する問題