Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
CMake
CMake
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,244
    • Issues 3,244
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 14
    • Merge Requests 14
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI / CD
    • Repository
    • Value Stream
  • External Wiki
    • External Wiki
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • CMake
  • CMakeCMake
  • Issues
  • #18944

Closed
Open
Opened Feb 18, 2019 by Gregor Jasny@gjasnyDeveloper

Using Android NDK zlib breaks system include ordering

Hello,

The following test case disturbs system include path ordering of Android NDK r16:

cmake_minimum_required(VERSION 3.14 FATAL_ERROR)

project(testcase CXX)

file(WRITE testcase.cpp "#include <iostream>")
add_library(testcase STATIC testcase.cpp)

find_package(ZLIB REQUIRED)
target_link_libraries(testcase PRIVATE ZLIB::ZLIB)

Error:

/home/gregorj/Android/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=aarch64-none-linux-android --gcc-toolchain=/home/gregorj/Android/android-ndk-r16b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64 --sysroot=/home/gregorj/Android/android-ndk-r16b/sysroot   -isystem /home/gregorj/Android/android-ndk-r16b/sysroot/usr/include -isystem /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include -isystem /home/gregorj/Android/android-ndk-r16b/sources/android/support/include -isystem /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++abi/include -isystem /home/gregorj/Android/android-ndk-r16b/sysroot/usr/include/aarch64-linux-android -funwind-tables -no-canonical-prefixes -D__ANDROID_API__=21 -fexceptions -frtti -g -fPIC   -std=gnu++14 -MD -MT CMakeFiles/testcase.dir/testcase.cpp.o -MF CMakeFiles/testcase.dir/testcase.cpp.o.d -o CMakeFiles/testcase.dir/testcase.cpp.o -c ../testcase.cpp
In file included from ../testcase.cpp:1:
In file included from /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include/iostream:40:
In file included from /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include/istream:163:
In file included from /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include/ostream:140:
/home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include/locale:807:12: error: use of undeclared identifier 'strtof_l'
    return strtof_l(__a, __p2, _LIBCPP_GET_C_LOCALE);
           ^
/home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include/locale:813:12: error: use of undeclared identifier 'strtod_l'; did you mean 'strtold_l'?
    return strtod_l(__a, __p2, _LIBCPP_GET_C_LOCALE);
           ^
/home/gregorj/Android/android-ndk-r16b/sysroot/usr/include/stdlib.h:237:13: note: 'strtold_l' declared here
long double strtold_l(const char* __s, char** __end_ptr, locale_t __l) __INTRODUCED_IN(21);
            ^
2 errors generated.

Before adding zlib the order was:

-isystem /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include
-isystem /home/gregorj/Android/android-ndk-r16b/sources/android/support/include
-isystem /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++abi/include
-isystem /home/gregorj/Android/android-ndk-r16b/sysroot/usr/include
-isystem /home/gregorj/Android/android-ndk-r16b/sysroot/usr/include/aarch64-linux-android

After adding zlib the order is as follows:

-isystem /home/gregorj/Android/android-ndk-r16b/sysroot/usr/include
-isystem /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include 
-isystem /home/gregorj/Android/android-ndk-r16b/sources/android/support/include
-isystem /home/gregorj/Android/android-ndk-r16b/sources/cxx-stl/llvm-libc++abi/include
-isystem /home/gregorj/Android/android-ndk-r16b/sysroot/usr/include/aarch64-linux-android 

I guess zlib.h living in /home/gregorj/Android/android-ndk-r16b/sysroot/usr/include affects include order.

My CMake command line is: ~/src/cmake/_build/bin/cmake -DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_NDK=/home/gregorj/Android/android-ndk-r16b -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -DCMAKE_SYSTEM_VERSION=21 -DCMAKE_ANDROID_STL_TYPE=c++_static -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang ..

Thanks, Gregor

Edited Feb 18, 2019 by Gregor Jasny
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
3.14.0
Milestone
3.14.0 (Past due)
Assign milestone
Time tracking
None
Due date
None
Reference: cmake/cmake#18944