You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by Alon Amid <al...@berkeley.edu> on 2017/10/05 21:37:52 UTC

'Include' error when Cross-Compiling

Hello

 

I've been attempting to cross-compile Arrow for RISC-V.

I am currently trying to build Arrow with Plasma and Python, but without the
compression libraries (snappy, brotli, zstd, lz4).

I am getting several errors indicating that stdlib.h is missing. An example
error is:

 

| In file included from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/ext/string_conversions.h:41:0,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/bits/basic_string.h:6159,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/string:52,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/stdexcept:39,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/array:39,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/tuple:39,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/bits/unique_ptr.h:37,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/memory:80,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/io/interfaces.h:22,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.h:21,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.cc:18:

|
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/cstdlib:75:15: fatal error:
stdlib.h: No such file or directory

|  #include_next <stdlib.h>

|                ^~~~~~~~~~

| compilation terminated.

 

 

The relevant example call is:

 

cd
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/build/src/arrow/python &&
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot-native/usr/bin/riscv64-poky-linux/riscv64-poky-linux-g++
-isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include -isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/build/src/rapidjson_ep/include -isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/build/flatbuffers_ep-prefix/src/flatbuffers_ep-install/include -isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/thirdparty/hadoop/include
-I/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7
.1-r0/arrow-apache-arrow-0.7.1/cpp/src -isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot-native/usr/lib/python2.7/site-packages/numpy/core/include
-isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/python2.7
--sysroot=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-a
rrow/0.7.1-r0/recipe-sysroot  -O2 -pipe -g -feliminate-unused-debug-types
-fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
/apache-arrow/0.7.1-r0=/usr/src/debug/apache-arrow/0.7.1-r0
-fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
/apache-arrow/0.7.1-r0/recipe-sysroot-native=
-fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
/apache-arrow/0.7.1-r0/recipe-sysroot=  -fvisibility-inlines-hidden
--sysroot=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-a
rrow/0.7.1-r0/recipe-sysroot -ggdb -O0 -Wall -std=c++11  -g -fPIC
-std=gnu++11 -o CMakeFiles/arrow_python_objlib.dir/io.cc.o -c
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.cc

 

 

When I manually check the highlighted path
(/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.
1-r0/recipe-sysroot/usr/include), stdlib.h is indeed there.

While googling for similar errors, I found these references:
https://github.com/OpenLightingProject/ola/pull/1132,
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129  , which seem to describe
a similar scenario.

As can be seen in the example call, most of the include directories are
included using -isystem rather than -I.

When looking further into Arrow's cmake files, this seems intentional:

 

./cpp/cmake_modules/ThirdpartyToolchain.cmake:include_directories(SYSTEM
${Boost_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${GTEST_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${GFLAGS_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${GBENCHMARK_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${RAPIDJSON_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${FLATBUFFERS_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${JEMALLOC_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:include_directories(SYSTEM
"${HADOOP_HOME}/include")

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${ZLIB_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${SNAPPY_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${BROTLI_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${LZ4_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${ZSTD_INCLUDE_DIR})

./cpp/src/arrow/gpu/CMakeLists.txt:include_directories(SYSTEM
${CUDA_INCLUDE_DIRS})

./cpp/src/plasma/CMakeLists.txt:include_directories(SYSTEM
${PYTHON_INCLUDE_DIRS})

./cpp/CMakeLists.txt:  include_directories(SYSTEM

./python/CMakeLists.txt:include_directories(SYSTEM

./python/CMakeLists.txt:include_directories(SYSTEM ${ARROW_INCLUDE_DIR})

./python/CMakeLists.txt:  include_directories(SYSTEM ${PARQUET_INCLUDE_DIR})

./python/CMakeLists.txt:  include_directories(SYSTEM ${PLASMA_INCLUDE_DIR})

 

 

I was wondering what is the reason for using -isystem rather than -I, and is
it possible that this indeed results in a similar scenario to what is
described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129 and
https://github.com/OpenLightingProject/ola/pull/1132.

If so - what would be the correct way to mitigate this?

 

Thanks

Alon Amid


Re: 'Include' error when Cross-Compiling

Posted by Wes McKinney <we...@gmail.com>.
hi Alon,

Can you open an Arrow JIRA with these details so we can get this
fixed? To be honest the only platforms where I have tested Arrow are
x86-64 and ARM64 (e.g. I have tested Arrow on a Tegra system), so it
is likely that the nuance of the SYSTEM argument to
include_directories was not an issue there. Can you confirm (in the
JIRA or here) if removing the "SYSTEM" from the CMake include
statements resolves the issue for you?

Thanks
Wes

On Thu, Oct 5, 2017 at 5:37 PM, Alon Amid <al...@berkeley.edu> wrote:
> Hello
>
>
>
> I've been attempting to cross-compile Arrow for RISC-V.
>
> I am currently trying to build Arrow with Plasma and Python, but without the
> compression libraries (snappy, brotli, zstd, lz4).
>
> I am getting several errors indicating that stdlib.h is missing. An example
> error is:
>
>
>
> | In file included from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/ext/string_conversions.h:41:0,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/bits/basic_string.h:6159,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/string:52,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/stdexcept:39,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/array:39,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/tuple:39,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/bits/unique_ptr.h:37,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/memory:80,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/io/interfaces.h:22,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.h:21,
>
> |                  from
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.cc:18:
>
> |
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/c++/7.2.0/cstdlib:75:15: fatal error:
> stdlib.h: No such file or directory
>
> |  #include_next <stdlib.h>
>
> |                ^~~~~~~~~~
>
> | compilation terminated.
>
>
>
>
>
> The relevant example call is:
>
>
>
> cd
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/build/src/arrow/python &&
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot-native/usr/bin/riscv64-poky-linux/riscv64-poky-linux-g++
> -isystem
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include -isystem
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/build/src/rapidjson_ep/include -isystem
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/build/flatbuffers_ep-prefix/src/flatbuffers_ep-install/include -isystem
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/arrow-apache-arrow-0.7.1/cpp/thirdparty/hadoop/include
> -I/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7
> .1-r0/arrow-apache-arrow-0.7.1/cpp/src -isystem
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot-native/usr/lib/python2.7/site-packages/numpy/core/include
> -isystem
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/recipe-sysroot/usr/include/python2.7
> --sysroot=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-a
> rrow/0.7.1-r0/recipe-sysroot  -O2 -pipe -g -feliminate-unused-debug-types
> -fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
> /apache-arrow/0.7.1-r0=/usr/src/debug/apache-arrow/0.7.1-r0
> -fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
> /apache-arrow/0.7.1-r0/recipe-sysroot-native=
> -fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
> /apache-arrow/0.7.1-r0/recipe-sysroot=  -fvisibility-inlines-hidden
> --sysroot=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-a
> rrow/0.7.1-r0/recipe-sysroot -ggdb -O0 -Wall -std=c++11  -g -fPIC
> -std=gnu++11 -o CMakeFiles/arrow_python_objlib.dir/io.cc.o -c
> /home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
> -r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.cc
>
>
>
>
>
> When I manually check the highlighted path
> (/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.
> 1-r0/recipe-sysroot/usr/include), stdlib.h is indeed there.
>
> While googling for similar errors, I found these references:
> https://github.com/OpenLightingProject/ola/pull/1132,
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129  , which seem to describe
> a similar scenario.
>
> As can be seen in the example call, most of the include directories are
> included using -isystem rather than -I.
>
> When looking further into Arrow's cmake files, this seems intentional:
>
>
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:include_directories(SYSTEM
> ${Boost_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${GTEST_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${GFLAGS_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${GBENCHMARK_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${RAPIDJSON_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${FLATBUFFERS_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${JEMALLOC_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:include_directories(SYSTEM
> "${HADOOP_HOME}/include")
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${ZLIB_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${SNAPPY_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${BROTLI_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${LZ4_INCLUDE_DIR})
>
> ./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
> ${ZSTD_INCLUDE_DIR})
>
> ./cpp/src/arrow/gpu/CMakeLists.txt:include_directories(SYSTEM
> ${CUDA_INCLUDE_DIRS})
>
> ./cpp/src/plasma/CMakeLists.txt:include_directories(SYSTEM
> ${PYTHON_INCLUDE_DIRS})
>
> ./cpp/CMakeLists.txt:  include_directories(SYSTEM
>
> ./python/CMakeLists.txt:include_directories(SYSTEM
>
> ./python/CMakeLists.txt:include_directories(SYSTEM ${ARROW_INCLUDE_DIR})
>
> ./python/CMakeLists.txt:  include_directories(SYSTEM ${PARQUET_INCLUDE_DIR})
>
> ./python/CMakeLists.txt:  include_directories(SYSTEM ${PLASMA_INCLUDE_DIR})
>
>
>
>
>
> I was wondering what is the reason for using -isystem rather than -I, and is
> it possible that this indeed results in a similar scenario to what is
> described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129 and
> https://github.com/OpenLightingProject/ola/pull/1132.
>
> If so - what would be the correct way to mitigate this?
>
>
>
> Thanks
>
> Alon Amid
>