0

コンパイル中にshaライブラリをmakefileにリンクするのに問題があります。

これが私のmakefileです:

CFLAGS= -g -Wall -Werror -std=c99 -pedantic 
LDFLAGS=-lssl -lcrypto
CC = gcc
LD = gcc
OBJS = dhtnode.o
PROG = dhtnode

.c.o:
gcc $< -o $@ $(CFLAGS)

all: $(PROG)

$(PROG): $(OBJS)
$(LD) $(LDFLAGS) $(OBJS) -o $(PROG)

dhtnode.o: dhtnode.c dhtpackettypes.h
$(CC) $(CFLAGS) $(LDFLAGS) dhtnode.c

clean:
/bin/rm -f *.o dhtnode

lcryptoライブラリを使用する私の関数はここにあります:

#include <openssl/sha.h>
#include <stdlib.h>
#include <stdin.h>
//there are other includes but not concerning this part of the code

char sha() {
char *ibuf = malloc(sizeof(char));
ibuf ="172.0.0.1:11112";
char *obuf = malloc(SHA_DIGEST_LENGTH);

SHA1((unsigned char*)ibuf, strlen(ibuf), (unsigned char*)obuf);
int i;
for (i = 0; i < 20; i++) {
    printf("%x" , (unsigned char)obuf[i]);
    }
printf("\n");

return *ibuf;
}

Eclipseでビルドするときに発生するエラーは次のとおりです。

C/p2p/dhtnode.c:107: undefined reference to `SHA1'

誰かが私のmakefileまたは考えられるEclipse設定の何が問題になっているのか教えてもらえますか?

事前にThx!

4

1 に答える 1

1

オブジェクトファイルをコンパイルする場合、は必要ありませんLDFLAGS-cバイナリをリンクする代わりに、オブジェクトファイルを生成するためのコンパイラフラグも必要です。

dhtnode.o: dhtnode.c dhtpackettypes.h
    $(CC) $(CFLAGS) -c dhtnode.c

この変更を行った後、プログラムは正常にコンパイルおよびリンクされます。

于 2013-03-26T18:38:23.387 に答える