0

私は自分のプロジェクトを構築しようとしています。libuv は既に as でコンパイルされ./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 を介して呼び出された場合は ld がライブラリを見つけられないのはなぜですか (-Wl,-Bstaticフラグに関係していると思われますが、よくわかりません)。

4

1 に答える 1

1

ライブラリのディレクトリへのフルパスを指定すると、次のように機能します。

stlib=['uv'],
stlibpath=[os.path.join(os.getcwd(), 'libuv')],

ああ、リンカーはそのようなひどいプログラムです。

于 2013-01-14T01:13:58.287 に答える