2013-01-14 3 views
0

프로젝트를 빌드하려고합니다. libuv가 ./libuv으로 이미 컴파일되어 있습니다 (라이브러리에 대한 상대 경로가 ./libuv/libuv.a이므로 libuv.a). 내가 직접 그 소리를 사용하는 경우ld는 Waf를 사용할 때 라이브러리를 찾을 수 없지만 Waf를 사용하지 않는 경우 라이브러리를 찾을 수 없습니다.

, 작동 :

$ clang++ src/**/*.cpp -std=c++11 -L./libuv -luv -I./libuv/include -I./include 

을 그러나, 나는이 웹 애플리케이션 방화벽을 사용하여 빌드 할 때, 나는 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를 통해 호출 할 때 라이브러리를 찾을 수없는 반면, 모든 nw는 Waf를 사용하지 않을 때 잘 작동합니다 (나는 -Wl,-Bstatic 플래그와 관련이 있다고 의심하지만 확실하지 않습니다). 라이브러리의 디렉토리의 전체 경로를 지정

답변

1

는 작동한다 :

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

아, 링커는 끔찍한 프로그램입니다.

관련 문제