0

作業中のソフトウェア プロジェクトに STXXL ライブラリを使用する必要がありますが、何らかの理由でテスト ファイルのコンパイルに問題があります。私はメイクファイルにあまり詳しくないので、いくつかのライブラリをリンクする際に混乱した可能性があります。

私が使用しているダミー ファイルは、Draw.h、Draw.cpp、および driver.cpp です。ご想像のとおり、Draw.h は Draw.cpp に実装されているメソッド draw() を宣言し、driver.cpp には main 関数が含まれ、Draw.h をインクルードして draw() を呼び出します。

私が使用しているメイクファイルは次のとおりです。

STXXL_ROOT      ?= /Users/name/stxxl-1.3.1
STXXL_CONFIG    ?= stxxl.mk
include $(STXXL_ROOT)/$(STXXL_CONFIG)

# use the variables from stxxl.mk
CXX              = $(STXXL_CXX)
CPPFLAGS        += $(STXXL_CPPFLAGS)
LDLIBS          += $(STXXL_LDLIBS)

# add your own optimization, warning, debug, ... flags
# (these are *not* set in stxxl.mk)
CPPFLAGS        += -O3 -Wall -g -DFOO=BAR

# build your application
# (my_example.o is generated from my_example.cpp automatically)
my_example.bin: driver.o Draw.o
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) driver.o -o $@ $(LDLIBS)

driver.o: driver.cpp Draw.h
    $(CXX) $(CXXFLAGS) -c driver.cpp

Draw.o: Draw.cpp Draw.h
    $(CXX) $(CXXFLAGS) -c Draw.cpp

私が得ているエラーは

g++  -I/Users/name/stxxl-1.3.1/include -include stxxl/bits/defines.h -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE  -O3 -Wall -g -DFOO=BAR  driver.o -o my_example.bin -L/Users/name/stxxl-1.3.1/lib -lstxxl
Undefined symbols for architecture x86_64:
  "draw(int)", referenced from:
      _main in driver.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [my_example.bin] Error 1

何か案は?

4

1 に答える 1

1

このルールでは:

my_example.bin: driver.o Draw.o
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) driver.o -o $@ $(LDLIBS)

存在する必要がありDraw.oますが、リンクしていません。これを試してください:

my_example.bin: driver.o Draw.o
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) driver.o Draw.o -o $@ $(LDLIBS)

またはより簡潔に:

my_example.bin: driver.o Draw.o
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
于 2012-03-05T00:50:58.160 に答える