[ https://issues.apache.org/jira/browse/ARROW-1659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16214873#comment-16214873 ]
Uwe L. Korn commented on ARROW-1659: ------------------------------------ [~alonamid] I think this certainly has to do with cross-compiling. I could not reproduce your error in any way locally but I always compiled for the host system. Can you post instructions on how you have setup the cross-compilation? > "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)