#c #linux #gitlab-ci #std #tizen-native-app
#c #linux #gitlab-ci #std #tizen-native-app
Вопрос:
У меня ошибка предварительной обработки для компиляции проекта gtest с заголовками tizen на ci-runners gitlab (Debian GNU / Linux 10 (buster)). gcc (Debian 8.3.0-6) 8.3.0
Но на локальном компьютере Ubuntu 16.04 успешно компилирует это. gcc (Ubuntu 5.4.0-6ubuntu1~ 16.04.11) 5.4.0 20160609
У меня установлен Tizen Studion 4.1 с SDK: WEARABLE-5.5 и knox_add_on_sdk_2.5.0. Экспортированный ПУТЬ env в tools / ide /bin и package-manager, а также tizen_include_root
Чтобы воспроизвести проблему, вы должны использовать #include <tizen.h> в проекте, который используется gtest и абсолютный путь к заголовкам tizen в include_directories(…
cmake_minimum_required(VERSION 3.5)
project(tests)
set (CMAKE_CXX_FLAGS "-std=c 14 ${CMAKE_CXX_FLAGS}")
include_directories(
#Tizen headers
if(DEFINED ENV{TIZEN_SDK_HOME})
SET(tizen_include_root "$ENV{TIZEN_SDK_HOME}/platforms/tizen-5.5/wearable/rootstraps/wearable-5.5-emulator.core/usr/include")
${tizen_include_root}/*
else()
message(WARNING "TIZEN_SDK_HOME env variable is not defined: tizen specific code completion and other features might not work")
endif()
)
include_directories(BEFORE
googletest/include
ошибки, подобные этому:
Scanning dependencies of target gtest
[ 12%] Building CXX object googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
In file included from /usr/include/c /8/cstdlib:75,
from /usr/include/c /8/ext/string_conversions.h:41,
from /usr/include/c /8/bits/basic_string.h:6400,
from /usr/include/c /8/string:52,
from /usr/include/c /8/bits/locale_classes.h:40,
from /usr/include/c /8/bits/ios_base.h:41,
from /usr/include/c /8/ios:42,
from /usr/include/c /8/ostream:38,
from **DELETED**/src/test/googletest/include/gtest/gtest.h:56,
from **DELETED**/src/test/googletest/src/gtest-all.cc:38:
/usr/include/stdlib.h:133:35: error: missing binary operator before token "("
#if __HAVE_FLOAT16 amp;amp; __GLIBC_USE (IEC_60559_TYPES_EXT)
^
/usr/include/stdlib.h:139:35: error: missing binary operator before token "("
#if __HAVE_FLOAT32 amp;amp; __GLIBC_USE (IEC_60559_TYPES_EXT)
^
/usr/include/stdlib.h:145:35: error: missing binary operator before token "("
#if __HAVE_FLOAT64 amp;amp; __GLIBC_USE (IEC_60559_TYPES_EXT)
или это:
In file included from /usr/include/x86_64-linux-gnu/bits/types/locale_t.h:22,
from /usr/include/stdlib.h:272,
from /usr/include/c /8/cstdlib:75,
from /usr/include/c /8/ext/string_conversions.h:41,
from /usr/include/c /8/bits/basic_string.h:6400,
from /usr/include/c /8/string:52,
from /usr/include/c /8/bits/locale_classes.h:40,
from /usr/include/c /8/bits/ios_base.h:41,
from /usr/include/c /8/ios:42,
from /usr/include/c /8/ostream:38,
from **DELETED**/src/test/googletest/include/gtest/gtest.h:56,
from **DELETED**/src/test/googletest/src/gtest-all.cc:38:
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h:28:8: error: redefinition of 'struct __locale_struct'
struct __locale_struct
Как я могу разделить заголовки tizen и system и какие заголовки я должен использовать?
Комментарии:
1. «компиляция проекта gtest с заголовками tizen на ci-runners gitlab» … Возможно, вам потребуется более подробная информация о том, как воспроизвести ошибку версия компилятора и т.д.
2. Добавлено больше деталей.
3. Студия Tizen обновила набор инструментов до GCC 9.2 и LLVM 10 в версии 4.0, поэтому он должен использовать GCC.
Ответ №1:
Проблема решена. Используя прямой путь к компилятору в CMakeList.txt помог мне.
if(DEFINED ENV{TIZEN_SDK_HOME})
set(CMAKE_CXX_COMPILER $ENV{TIZEN_SDK_HOME}/tools/i586-linux-gnueabi-gcc-6.2/bin/i586-linux-gnueabi-g )
Вы должны использовать ФЛАГИ с —sysroot и -L для библиотек tizen
SET(gcc_root "$ENV{TIZEN_SDK_HOME}/platforms/tizen-5.5/wearable/rootstraps/wearable-5.5-emulator.core")
set(CMAKE_C_FLAGS "--std=c99 ${CMAKE_C_FLAGS}")
set(CMAKE_C_STANDARD 99)
set (CMAKE_CXX_FLAGS "--std=c 14 --sysroot=${gcc_root} -L${gcc_root}/lib -L${gcc_root}/usr/lib ${CMAKE_CXX_FLAGS}")
Также необходим LDFLAGS
export gcc_root=${TIZEN_SDK_HOME}/platforms/tizen-5.5/wearable/rootstraps/wearable-5.5-emulator.core
export LDFLAGS="--sysroot=${gcc_root} -L${gcc_root}/lib -L${gcc_root}/usr/lib"