#编译问题# 01 | error: use of undeclared identifier ‘nftw‘

Posted 井方哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#编译问题# 01 | error: use of undeclared identifier ‘nftw‘相关的知识,希望对你有一定的参考价值。

一、问题

编译时出现如下错误:

FAILED: /Users/xxx/env/android-ndk-r20b/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++  --target=armv7-none-linux-androideabi16 --gcc-toolchain=/Users/xxx/env/android-ndk-r20b/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/xxx/env/android-ndk-r20b/toolchains/llvm/prebuilt/darwin-x86_64/sysroot  -DEnableLOG -DQUT_STATISTIC_ENABLE -I../../../../src/main/cpp/external/libunwindstack/deps/android-base -I../../../../src/main/cpp/external/libunwindstack/deps/android-base/include -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security   -Oz -DNDEBUG  -fPIC   -Wall -Wextra -Wexit-time-destructors -MD -MT src/main/cpp/external/libunwindstack/deps/android-base/CMakeFiles/android-base.dir/file.cpp.o -MF src/main/cpp/external/libunwindstack/deps/android-base/CMakeFiles/android-base.dir/file.cpp.o.d -o src/main/cpp/external/libunwindstack/deps/android-base/CMakeFiles/android-base.dir/file.cpp.o -c /Users/xxx/src/main/cpp/external/libunwindstack/deps/android-base/file.cpp
  /Users/xxx/src/main/cpp/external/libunwindstack/deps/android-base/file.cpp:165:3: error: use of undeclared identifier 'nftw'
    nftw(path, callback, 128, FTW_DEPTH | FTW_MOUNT | FTW_PHYS);
    ^
  1 error generated.

定位原代码

 nftw(path, callback, 128, FTW_DEPTH | FTW_MOUNT | FTW_PHYS);

二、分析

发现:nftw这个函数具体如下

#if __ANDROID_API__ >= 17
int ftw(const char* __dir_path, int (*__callback)(const char*, const struct stat*, int), int __max_fd_count) __INTRODUCED_IN(17);
int nftw(const char* __dir_path, int (*__callback)(const char*, const struct stat*, int, struct FTW*), int __max_fd_count, int __flags) __INTRODUCED_IN(17);
int ftw64(const char* __dir_path, int (*__callback)(const char*, const struct stat64*, int), int __max_fd_count) __RENAME_STAT64(ftw, 17, 21);
int nftw64(const char* __dir_path, int (*__callback)(const char*, const struct stat64*, int, struct FTW*), int __max_fd_count, int __flags) __RENAME_STAT64(nftw, 17, 21);
#endif /* __ANDROID_API__ >= 17 */

原来,仅 Android API >=17 时 才支持这个函数

三、问题修复

修改方案就是修改Android的minSdkVersion,如上 要>=17

android{
    compileSdkVersion 29
    defaultConfig {
        minSdkVersion 17 // 修改的值要大于要求的版本
        targetSdkVersion 29
        versionCode 1
        versionName "1.0.0"

以上是关于#编译问题# 01 | error: use of undeclared identifier ‘nftw‘的主要内容,如果未能解决你的问题,请参考以下文章

#编译问题# 01 | error: use of undeclared identifier ‘nftw‘

MATLAB-matconvnet报错:Error using mex ...... error: ‘numeric_limits’ is not a member of ‘std’

error C2275: 'SOCKET' : illegal use of this type as an expression

三个方法解决error: use of moved value

RedShift Error when using COUNT (Distinct XXX) ERROR: XX000: This type of associated subquery patter

swig c++ to python (with numpy): error: use of undeclared identifier 'import_array'