2017-03-28 1 views
2

Tensorflow를 사용하는 공유 라이브러리를 만들고 있습니다. 함께Tensorflow : 공유 라이브러리와의 동적 연결

cc_binary(
    name = "recognizer.so", 
    srcs = glob(["recognizer.cpp"]), 
    linkshared = 1, 
    deps = [ 
     "//tensorflow:сore" 
    ], 
) 

모든 링크를하지만 난에 대한 94메가바이트 크기가 아니라 libtensorflow_cc.so에 의존 공유 라이브러리와 끝까지 : 지금 나는 다음과 같은 BUILD 파일과 하위 프로젝트로 Tensorflow의 소스 트리에 배치. 실제로 libtensorflow_cc.so가 빌드 된 것과 같은 이진 파일도 없습니다.

대상은 //tensorflow:libtensorflow_cc.so입니다. 이것은 cc_binary로 선언됩니다. 이는 (바젤에 따라) 나는 그것에 의존 할 수 없다는 것을 의미합니다. 더욱이이 타겟은 실제로 비공개입니다. 즉, 빌드 할 수는 있지만 다른 서브 프로젝트에서 참조 할 수는 없습니다. 적어도 바젤과.

이렇게 단순한 작업을 수행 할 수있는 방법이 있습니까?

+0

어떤 OS를 사용하십니까? 어떤'--cpu' 플래그 값이 있다면, Bazel에게 건네 줍니까? –

+0

나는 리눅스를 사용하고있다. --cpu 플래그가 Bazel에 전달되지 않았습니다 –

+0

libtensorflow_cc.so에 의존하는 공유 라이브러리로 사용자 정의 코드를 빌드 하시겠습니까? – mhlopko

답변

1

libtensorflow.so 또는 libtensorflow_cc.so가 다음과 같은 이유에 대해서는 언급 할 수 없습니다. 그러나 cc_binary에 의해 생성 된 공유 라이브러리에 의존 할 수 있으려면 Bazel에서 할 수있는 트릭이 있습니다. cc_binary를 cc 규칙의 소스로 선언하십시오.

cc_binary(
    name = "liba.so", 
    srcs = [ "a.cc" ], 
    linkshared = 1 
) 

cc_binary(
    name = "main", 
    srcs = [ "main.cc", "liba.so" ], 
) 

지금이 사실 :) 매우 지원되지 않는 것입니다, 우리는 우리가 다음 달에 공유 라이브러리를 처리하는 방법을 변경하려는, 그래서 나는 거의 휴식 것입니다 약속 할 수 있습니다. https://github.com/bazelbuild/bazel/issues/1920에 가입하거나 bazel-dev @를 따라 업데이트 할 수 있습니다.

+0

# LCM 공유 라이브러리 경로 cc_binary ( 이름 = "liblcm.so" SRCS = [ "lib 디렉토리/liblcm.so"], 콥트 = [ "-I/ visibility = [ "visibility : public"] liblcm.so를 내 빌드 파일에 포함하려고 시도하고 있지만 bazel은 lcm/liblcm.so 입력 파일이 누락되었다고 알려줍니다. 위의 .cc 파일을 변환하는 위의 방법을 시도했지만 그게 나를 위해 작동하지 않았다 – Pototo

+0

그건 별도의 문제처럼 들리 네, 질문을 만들고 더 많은 컨텍스트를 제공 할 수 있습니까? – mhlopko

관련 문제