/ / CMake ostrzega przed konfliktem z biblioteką w niejawnych katalogach - linux, cmake

CMake ostrzega o konflikcie z biblioteką w ukrytych katalogach - linux, cmake

Mam cross-toolchain stworzony z „buildroot 2013.02” i „Sourcery CodeBench ARM 2012.09”. W tym zestawie narzędzi mam bibliotekę libX11.so dwa razy:

  • w /opt/...linux-gnueabi/sysroot/usr/lib jest obiektem ARM do połączenia z plikami docelowymi
  • w / opt / vibkart / toolchain-arm / usr / lib jest obiektem x86-64 do połączenia z plikami hosta

Z jakiegoś powodu cmake myli ścieżki i otrzymuję to ostrzeżenie:

CMake Warning at CMakeLists.txt:194 (add_executable):
Cannot generate a safe runtime search path for target vibkart because
files in some directories may conflict with libraries in implicit
directories:

runtime library [libX11.so.6] in /opt/vibkart/toolchain-arm/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib may be hidden by files in:
/opt/vibkart/toolchain-arm/usr/lib

Some of these libraries may not be found correctly.

Używam następującego pliku toolchainfile.cmake:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER /opt/vibkart/toolchain-arm/usr/bin/arm-none-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER /opt/vibkart/toolchain-arm/usr/bin/arm-none-linux-gnueabi-g++)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -pipe -mfloat-abi=softfp -mfpu=neon -march=armv7-a -mtune=cortex-a8 -O2 " CACHE STRING "Buildroot CFLAGS" FORCE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -pipe -mfloat-abi=softfp -mfpu=neon -march=armv7-a -mtune=cortex-a8 -O2 " CACHE STRING "Buildroot CXXFLAGS" FORCE)
set(CMAKE_INSTALL_SO_NO_EXE 0)
set(CMAKE_PROGRAM_PATH "/opt/vibkart/toolchain-arm/usr/bin")
set(CMAKE_FIND_ROOT_PATH "/opt/vibkart/toolchain-arm/usr/arm-buildroot-linux-gnueabi/sysroot")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(ENV{PKG_CONFIG_SYSROOT_DIR} "/opt/vibkart/toolchain-arm/usr/arm-buildroot-linux-gnueabi/sysroot")
set(OPENGL_INCLUDE_DIR "/opt/vibkart/toolchain-arm/usr/include/")
set(OPENGL_gl_LIBRARY "/opt/vibkart/toolchain-arm/usr/lib/libGLESv2.so")

Pytania:

  1. Gdzie są zdefiniowane te ścieżki?
  2. Jak mogę wykluczyć ścieżkę biblioteki x86 z kompilacji krzyżowej?

Z góry dziękuję!

Odpowiedzi:

2 dla odpowiedzi № 1

Dzięki Brad King Zdałem sobie sprawę, że ścieżka jest dodawana za każdym razem, gdy łączę się z biblioteką tego katalogu.

Z powodu złego wpisu w toolchainfile.cmake dodano ścieżkę x86-64. Tak więc zmiana następujących linii rozwiązała problem:

-set(OPENGL_INCLUDE_DIR "/opt/vibkart/toolchain-arm/usr/include/")
+set(OPENGL_INCLUDE_DIR "/opt/vibkart/toolchain-arm/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include/")
-set(OPENGL_gl_LIBRARY "/opt/vibkart/toolchain-arm/usr/lib/libGLESv2.so")
+set(OPENGL_gl_LIBRARY "/opt/vibkart/toolchain-arm/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libGLESv2.so")