最も単純なBoost.Asioチュートリアルの例「timer1」(timer.cppにあります)を、Debianのsqueeze、python 2.6.6でwafを使用して構築しようとしています。
root@ds:/var/timer# ls
timer.cpp wscript
ここにwscriptはwafの構成です:
#! /usr/bin/env python
top = '.'
out = '.'
def options(opt):
opt.load('compiler_cxx')
def configure(conf):
conf.load('compiler_cxx')
conf.env['LINKFLAGS'] = '--verbose -L/usr/local/lib -lboost_system'
def build(bld):
tgen = bld.new_task_gen()
tgen.features = 'cxx cxxprogram'
tgen.source = 'timer.cpp'
tgen.target = 'timer'
tgen.includes = '.'
tgen.update_outputs = True
waf configure
成功しています。
しかし、エラーで終了します(行をマークするために下waf --verbose build
に挿入しました)<*>
Waf: Entering directory `/var/timer'
[1/2] cxx: timer.cpp -> timer.cpp.1.o
[2/2] cxxprogram: timer.cpp.1.o -> timer
timer.cpp.1.o: In function `__static_initialization_and_destruction_0(int, int)':
timer.cpp:(.text+0x103): undefined reference to `boost::system::generic_category()'
timer.cpp:(.text+0x10f): undefined reference to `boost::system::generic_category()'
...
Build failed
-> task in 'timer' failed (exit status 1):
{task 38446736: cxxprogram timer.cpp.1.o -> timer}
<*>
['/usr/bin/g++', '--verbose -L/usr/local/lib -lboost_system', 'timer.cpp.1.o', '-o', '/var/timer/timer', '-Wl,-Bstatic', '-Wl,-Bdynamic']
waf で呼び出された gcc がリンク時に boost_system ライブラリを見つけられなかったようです。
しかし、waf を使用せずに gcc でサンプルをビルドすると、すべて正常に動作します。
root@ds:/var/timer# /usr/bin/g++ --verbose -I/var/flake/lib/boost timer.cpp -c -o timer.cpp.1.o
...
<**>
root@ds:/var/timer# /usr/bin/g++ --verbose -L/usr/local/lib -lboost_system timer.cpp.1.o -o timer -Wl,-Bstatic -Wl,-Bdynamic
...
root@ds:/var/timer# ls
timer.cpp timer.cpp.1.o timer wscript
ご覧のとおり、waf で使用されるコマンド ライン ( でマーク<*>
) は、 でマークされたコマンド ラインと同じです<**>
。しかし、結果はまったく異なります。なんで?そして、どうすればwafにそれを構築させることができますか? ここからの解決策も私にはうまくいきません。また試した
...
opt.tool_options('boost')
...
conf.load('compiler_cxx boost')
conf.check_boost()
...
tgen.uselib = 'BOOST'
...
しかし何の効果もなく
そして別の質問です。の出力は、 のgcc --verbose
出力よりもはるかに広範囲ですwaf --verbose
。verbose
オプションはwafにそのようなすべての情報を表示させる必要があるように思えました。なぜそうではないのですか?waf オプション -vvv もこの情報を表示しません。