LINUX.ORG.RU

cmake, кросс-компиляция и gcc-6+

 , ,


0

1

Посоны, кто-нибудь уже сталкивался с этим багом/фичей?

Вкратце, cmake генерит системные include пути с новым ключом в gcc-6+, -isystem /usr/include, при этом кросс-компиляция стреляет с ошибкой типа:

<sysroot>/usr/include/c++/6.2.0/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
 #include_next <stdlib.h>

Лечится таким вот хаком:

set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-I")

Есть ли более правильное решение?

★★★★★

Ответ на: комментарий от intelfx

Как у тебя кросс-компиляция в CMake сделана?

source-ингом окружения для target-платформы

Написать тулчейн-файл?

%cat OEToolchainConfig.cmake
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_C_FLAGS $ENV{CFLAGS} CACHE STRING "" FORCE )
set( CMAKE_CXX_FLAGS $ENV{CXXFLAGS}  CACHE STRING "" FORCE )
set( CMAKE ASM_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE )
set( CMAKE_LDFLAGS_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE )

set( CMAKE_FIND_ROOT_PATH $ENV{OECORE_TARGET_SYSROOT} $ENV{OECORE_NATIVE_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( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )

# Set CMAKE_SYSTEM_PROCESSOR from the sysroot name (assuming processor-distro-os).
if ($ENV{SDKTARGETSYSROOT} MATCHES "/sysroots/([a-zA-Z0-9_-]+)-.+-.+")
  set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_MATCH_1})
endif()

# Include the toolchain configuration subscripts
file( GLOB toolchain_config_files "${CMAKE_TOOLCHAIN_FILE}.d/*.cmake" )
foreach(config ${toolchain_config_files})
    include(${config})
endforeach()

Я думаю, он используется.

UVV ★★★★★
() автор топика
Ответ на: комментарий от XMs

А почему так неуверенно?

Ну я его не передаю в cmake напрямую. Имею ввиду, что он source'ится вместе с окружением, ибо даже если я его передам параметром, результат тот же.

UVV ★★★★★
() автор топика

Я с таким сталкивался на самосборном тулчейне на раче. Решением было: ребут плюс полная пересборка с нуля.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

Решением было: ребут плюс полная пересборка с нуля.

Ну пересобрал и я и коллега. Можно попробовать отследить, когда он появилось, конечно, просто в рецептах компилера и cmake точно ничего не менялось..

UVV ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.