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 (JIRA)" <ji...@apache.org> on 2017/10/09 04:17:00 UTC

[jira] [Created] (ARROW-1659) "stdlib.h: No such file or directory" when cross-compiling for RISC-V with GCC 7.2

Alon Amid created ARROW-1659:
--------------------------------

             Summary: "stdlib.h: No such file or directory" when cross-compiling for RISC-V with GCC 7.2
                 Key: ARROW-1659
                 URL: https://issues.apache.org/jira/browse/ARROW-1659
             Project: Apache Arrow
          Issue Type: Bug
          Components: C++
         Environment: RISC-V, Cross-compiling for RISC-V Linux with GCC 7.2
            Reporter: Alon Amid


I’ve been attempting to cross-compile Arrow for RISC-V.
I was trying to build Arrow with Plasma and Python, but without the compression libraries (snappy, brotli, zstd, lz4).
I was 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-arrow/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-arrow/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 checked 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})

Since compiling for RISC-V requires GCC 7.2, It is likely that this is the same issue that is exposed by using GCC version 6.0 and above is the previously mentioned references (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129 and https://github.com/OpenLightingProject/ola/pull/1132)

I mitigated the issue temporarily by setting the following in cpp/CMakeLists.txt:
set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-I ") 
However, I think this should be done anytime GCC 6.0 or higher is used.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)