0

次のディレクトリ構造を持つ C++ プロジェクトがあります。

src
├── database
│   ├── database.hpp
│   ├── leveldb.cpp
│   └── leveldb.hpp
├── Makefile
└── server.cpp

server.cpp には、「database/database.hpp」と「database/leveldb.hpp」が含まれています。leveldb.cpp には「leveldb.hpp」が含まれています

私のMakefileはこれまでのところです($LEVELDBはGoogleのleveldbライブラリへのパスであり、カスタムメイドのクラスを表す私のleveldb.hppおよびcppファイルとは異なることに注意してください):

CC=g++
LEVELDB=/route/to/Googles/library/leveldb
BOOST=/route/to/boost/cpp-netlib-0.9.2

DATABASE=/route/to/my/project/src/database

CFLAGS=-I$(LEVELDB)/include -I$(BOOST) -Wall -O2
LDFLAGS=-L$(LEVELDB) -lleveldb -lpthread -lboost_system -lboost_thread -pthread

all:server

server: server.cpp database/leveldb.cpp
    $(CC) -o $@ $(CFLAGS) -I$(DATABASE) $< $(LDFLAGS) -L$(DATABASE)

私はそれをコンパイルすることができません。「`LevelDB::LevelDB(std::basic_string, std::allocator >)' への未定義の参照」というエラーが表示されますが、これは Makefile によるコンパイル エラーであることがわかっています。 1 つのソース ファイル。

どうもありがとうございました。

ありがとう :)

4

1 に答える 1

2

make(またはmake allまたはmake server)make servidorまたは leveldbいずれにせよ、問題は、定義をターゲットにリンクしていないことです。

このルールでは:

servidor: server.cpp database/leveldb.cpp
    $(CC) -o $@ $(CFLAGS) -I$(DATABASE) $< $(LDFLAGS) -L$(DATABASE)

自動変数 を使用しています$<。これは、最初の前提条件 ( server.cpp) を意味します。を使用する必要があります。これは、すべての前提条件 ( )$^を意味します。server.cpp database/leveldb.cpp

makeまたはmake allまたはの場合、Make はについて言及していないデフォルトのルールを使用してビルドをmake server試みます。ルールを「all:servidor」にしないでよろしいですか?serverserver.cppleveldb.cpp

于 2012-04-24T20:27:08.250 に答える