我正在尝试在Debian挤压python 2.6.6上使用waf 构建最简单的Boost.Asio教程示例“ timer1”(位于timer.cpp中)。
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也不会显示此信息。