0

Snappy ライブラリと makefile を使用するプロジェクトがあります。

CXX=g++
CXXFLAGS=-c -Wall
LFLAGS=
OBJS=main.o Utilities.o FramingFormat.o Crc32.o

snappy.out: $(OBJS)
        $(CXX) $(LFLAGS) $^ -o $@

$(OBJS): %.o:%.cpp
        $(CXX) $(CXXFLAGS) $< -o $@
clean:
    -rm -rf *.o
.PHONY: clean

Snappy ライブラリは以前にビルドされています。

Makefile を実行すると、エラーが発生します。

g++  main.o Utilities.o FramingFormat.o Crc32.o -o snappy.out
FramingFormat.o: In function `compressToFrame(char*, unsigned long, char*, unsigned long*)':
FramingFormat.cpp:(.text+0x5b): undefined reference to `snappy_compress'
FramingFormat.o: In function `uncompressFromFrameData(char*, unsigned long, char*, unsigned long*)':
FramingFormat.cpp:(.text+0x14a): undefined reference to `snappy_uncompress'
FramingFormat.o: In function `maxFrameLength(unsigned long)':
FramingFormat.cpp:(.text+0x2bf): undefined reference to `snappy_max_compressed_length'
FramingFormat.o: In function `uncompressedDataLength(char*, unsigned long, unsigned long*)':
FramingFormat.cpp:(.text+0x2f8): undefined reference to `snappy_uncompressed_length'
collect2: error: ld returned 1 exit status
make: *** [snappy.out] Error 1

これは、makefile が、この問題を解決する方法として、snappy libs を使用していることを認識していないためですか? それは私のディレクトリです:

  • snappy/catalog-with-snappy
  • snappy/catalog-with-project-using-snappy

[編集] 私のメイクファイルは次のようになります。

CXX=g++
CXXFLAGS=-c -Wall
LFLAGS=
OBJS=main.o Utilities.o FramingFormat.o Crc32.o

snappy.out: $(OBJS)
        $(CXX) $(LFLAGS) $^ -L"../../SnappyLib1.1.2/SnappyLib1.1.2" -o $@

$(OBJS): %.o:%.cpp
        $(CXX) $(CXXFLAGS) $< -L"../../SnappyLib1.1.2/SnappyLib1.1.2" -o $@
clean:
    -rm -rf *.o
.PHONY: clean
4

1 に答える 1

2

アクセス可能なディレクトリに snappy.so または snappy.a があると仮定して、リンカー オプションで -lsnappy を使用します。または、ディレクトリを明示的に使用する必要がある場合があります

于 2014-04-14T12:45:29.090 に答える