Я не могу найти библиотеку при использовании Waf, но может, когда не используется Waf

Я пытаюсь построить свой проект. Я уже скомпилировал 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

Решение

Указание полного пути к каталогу библиотеки заставляет ее работать:

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

О, линкеры такие ужасные программы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]