2017-09-18 18 views
0

Linux 용 프로젝트에 CMake, GTest 및 Intel의 TBB를 사용하고 싶습니다. 지금까지 불만없이 구축 할 수 있었지만 TBB에 필요한 동적 연결은 다음과 같습니다. 그들의 라이브러리 중 하나에 대해서만 약간의 문제가 있습니다. 나는 그들의 CMake 기능을 사용하고Intel TBB 링크 및 RPATH

은과 같이 호출 :

set(TBB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tbb) 
set(TBB_BUILD_DIR "tbb_build_dir=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") 
set(TBB_BUILD_PREFIX "tbb_build_prefix=tbb") 

include(${TBB_ROOT_DIR}/cmake/TBBBuild.cmake) 

tbb_build(TBB_ROOT ${TBB_ROOT_DIR} 
      MAKE_ARGS 
       ${TBB_BUILD_DIR} 
       ${TBB_BUILD_PREFIX} 
      CONFIG_DIR 
      TBB_DIR) 

find_package(TBB REQUIRED) 

실행, 다음과 같은 에러가 발생합니다

error while loading shared libraries: libtbbmalloc_debug.so.2: cannot open shared object file: No such file or directory 

ldd <whatever_test_executable>를 실행 한 후 나는 다음과 같은 출력을 얻을

linux-vdso.so.1 => (0x00007fff741b9000) 
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd99a6fd000) 
libtbb_debug.so.2 => /home/mrbzapp/test_proj/build/Builds/lib/tbb_debug/libtbb_debug.so.2 (0x00007fd99a489000) 
libtbbmalloc_proxy_debug.so.2 => /home/mrbzapp/test_proj/build/Builds/lib/tbb_debug/libtbbmalloc_proxy_debug.so.2 (0x00007fd99a285000) 
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd99a081000) 
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fd999dd4000) 
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fd999a99000) 
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fd999887000) 
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd99967f000) 
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd9992f7000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd998fee000) 
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd998dd7000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd998a0e000) 
/lib64/ld-linux-x86-64.so.2 (0x000055a935c16000) 
libtbbmalloc_debug.so.2 => not found 
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fd9987f2000) 
libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fd9985c0000) 
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fd99839e000) 
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fd998198000) 
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fd997f92000) 

빌드하는 동안 나는 CMake (그리고 TBB의 TBBBuild fun ction)은 rpath/home/mrbzapp/test_proj/build/Builds/lib/tbb_debug/을 추가하고 연결된 tbb 라이브러리의 대부분은이 경로를 사용하지만 libtbbmalloc_debug.so.2은 감기에 빠졌고 모든 것을 가져 왔습니다. 나는 완전히 이해할 수없는 무엇을 발견

libtbbmalloc_debug.so.2않습니다이 존재하는지, 그리고 있습니다 TBB의 기능에 의해 설정된 RPATH를 사용하여 다른 TBB 라이브러리와 함께 존재한다.

내가 잘못하고있는 것은 무엇일까? 그리고 이러한 모든 라이브러리가 런타임에 제대로 링크되도록하려면 어떻게해야할까요?

답변

1

MrBZapp.

이 문제를 재현 할 수 있었으므로 신고 해 주셔서 감사합니다. libtbbmalloc_proxy_debug.so.2에서 libtbbmalloc_debug.so.2를 찾을 수 없습니다. 해결 방법으로 "source /home/mrbzapp/test_proj/build/Builds/lib/tbb_debug/tbbvars.sh intel64"를 제안 할 수 있습니다. 귀하의 환경에서 귀하의 응용 프로그램을 실행 후.

0

물건을 작동시키는 방법을 찾았습니다. 추가 세부 정보가 순서대로 정리되어 있습니다.

I target_link_libraries(<target> TBB::tbb)

을 사용하고 때 내가한다고 나는이 일을 할 수있는 "올바른"방법은 긍정적 인 모르겠지만,이 방법이 될 것으로 보인다 target_link_libraries(<target> ${TBB_IMPORTED_TARGETS})를 작성하여 링크를 지정하는 사용되었다 그 일하고있다.

+0

올바른 방법이 아닙니다. 응용 프로그램은 실행할 수 있었지만 TBB는 메모리를 관리 할 수 ​​없어 모든 방식으로 이상한 충돌이 발생했습니다. 해결 방법은 Alexey Moskalev에게 감사드립니다! – MrBZapp