여러분,Bazel Link .so 라이브러리는 전혀 다른 원격 폴더에 있습니다.
.th 라이브러리와 정적 라이브러리를 내 tensorflow 프로그램에 연결하려고합니다. 내 헤더는
/usr/local/lib
에
/usr/local/include/lcm
그리고 정적/공유 라이브러리 (.so를, 등)에 있지만 Bazel은 존재하지 않는 불평하거나 그들을 찾을 수 없습니다. 여기 내 빌드 파일 내 코드입니다 : 내가 (BUILD 및 main.cc 모두에서) LCM 관련 코드를 제거하면
package(default_visibility = ["//tensorflow:internal"])
licenses(["notice"]) # Apache 2.0
exports_files(["LICENSE"])
# LCM shared libraries path
cc_library(
name = "lcm_lib",
srcs = glob([
"*.so",
]),
copts = ["-L/usr/local/lib"],
linkopts = ["-pthread", "-shared"],
visibility = ["//visibility:public"],
)
# LCM header libraries path
cc_library(
name = "lcm_headers",
hdrs = glob([
"include/**/*.h",
]),
copts = ["-L/usr/local/include"],
linkopts = ["-pthread"],
visibility = ["//visibility:public"],
)
cc_binary(
name = "myProject",
srcs = [
"main.cc",
],
linkopts = ["-lm"],
deps = [
"//tensorflow/cc:cc_ops",
"//tensorflow/core:framework_internal",
"//tensorflow/core:tensorflow",
],
)
filegroup(
name = "all_files",
srcs = glob(
["**/*"],
exclude = [
"**/METADATA",
"**/OWNERS",
"bin/**",
"gen/**",
],
),
visibility = ["//tensorflow:__subpackages__"],
)
, 그럼 내 프로그램 빌드 및 실행됩니다. LCM을 포함 시키면 lcm :: LCM :: ~ LCM()이 정의되지 않았으며 liblcm.so를 찾을 수 없다는 오류가 발생합니다. 이제는 비 tensorflow 코드 (또는 대부분의 프로젝트)에서 cmake를 실행 중이며 LCM과 필요한 나머지 라이브러리 (openCV 등)를 찾을 수 있습니다. CMakeList.txt와 같은 명령을 다음과 같이 사용합니다.
# search path for LCM header files
set(LCM_IncludeSearchPaths
/usr/include/
/usr/local/include/
/opt/local/include
)
# search path for LCM static/dynamic libraries
set(LCM_LibrarySearchPaths
/usr/lib/
/usr/local/lib/
/opt/local/lib/
)
find_path(LCM_INCLUDE_DIR
NAMES lcm/lcm.h
HINTS ${LCM_IncludeSearchPaths}
)
FIND_LIBRARY(LCM_LIBS
NAMES lcm
HINTS ${LCM_LibrarySearchPaths}
PATH_SUFFIXES lib
)
그리고 모두 작동합니다. 그러나이 기밀성을 보장하기 위해, :-(
내가 오류를 얻을 : @ lcm_headers // ':' 'lcm_headers'라는 저장소에 저장할 수 없습니다. ''lcm_headers // ': 패키지'external '을 (를)로드하는 중 오류가 발생했습니다. 오류 :/home/mario/tensorflow_HY/tensorflow/examples/MYPROJECT/cpp/BUILD : 39 : '// tensorflow/examples/MYPROJECT/cpp : PROJECT'에 의해 해결되고 참조되어야합니다. – Pototo
위의 WOKSPACE 및 새로운 BUILD 파일을 참조하십시오. 미리 도움을 주셔서 감사합니다 – Pototo
repo의 루트에 붙여 넣은 작업 영역 파일입니까? 어쩌면 루트에 하나, tensorflow/examples/MYPROJECT /에 두 개의 작업 영역 파일이있을 수 있습니다. 루트를 편집하십시오. 그것보다 괜찮아 보이는 .. – mhlopko