我正在尝试构建我的项目。我已经将./libuv
中的libuv编译为libuv.a
(因此库的相对路径为./libuv/libuv.a
)。
当我直接使用clang时,它可以工作:
$ clang++ src/**/*.cpp -std=c++11 -L./libuv -luv -I./libuv/include -I./include
但是,当我使用Waf构建时,我收到链接器错误,指示ld找不到libuv:
$ CXX=clang++ ./waf configure && ./waf build
...
[2/2] cxxprogram: build/src/uv/loop.cpp.1.o -> build/a.out
/usr/bin/ld.gold: error: cannot find -luv
...
Build failed
-> task in 'a.out' failed (exit status 1):
{task 140349441167440: cxxprogram loop.cpp.1.o -> a.out}
['clang++', 'src/uv/loop.cpp.1.o', '-o', '~/sf/build/a.out', '-Wl,-Bstatic', '-Llibuv', '-luv', '-Wl,-Bdynamic']
我的wscript很简单:
def options(opt):
opt.load('compiler_cxx')
def configure(conf):
conf.load('compiler_cxx')
def build(bld):
bld.program(
source=bld.path.ant_glob('src/**/*.cpp'),
target='a.out',
includes=['include', 'libuv/include'],
stlibpath=['libuv'],
stlib=['uv'],
cxxflags=['-std=c++11']
)
为什么在通过Waf调用时不能找到该库,而在不使用Waf时一切正常(我怀疑它与-Wl,-Bstatic
标志有关,但我不确定)?
答案 0 :(得分:1)
指定库目录的完整路径使其工作:
stlib=['uv'],
stlibpath=[os.path.join(os.getcwd(), 'libuv')],
哦,连接器是如此可怕的程序。