Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android “如何修复”;找不到工具链文件“&引用;CMake错误:启用语言后未设置CMake“U C”编译器;cmake libjpeg-turbo.so?_Android_Cmake_Toolchain_.so_Libjpeg Turbo - Fatal编程技术网

Android “如何修复”;找不到工具链文件“&引用;CMake错误:启用语言后未设置CMake“U C”编译器;cmake libjpeg-turbo.so?

Android “如何修复”;找不到工具链文件“&引用;CMake错误:启用语言后未设置CMake“U C”编译器;cmake libjpeg-turbo.so?,android,cmake,toolchain,.so,libjpeg-turbo,Android,Cmake,Toolchain,.so,Libjpeg Turbo,我正在为不同的CPU架构生成libjpeg-turbo.so文件 如果在生成文件夹中执行以下cmake,即使该路径中存在工具链文件,也会出现此错误: $ cmake -G"Unix Makefiles" \ -DANDROID_ABI=arm64-v8a \ -DANDROID_ARM_MODE=arm \ -DANDROID_PLATFORM=android-${21} \ -DANDROID_TOOLCHAIN=${gcc} \ -

我正在为不同的CPU架构生成libjpeg-turbo.so文件

如果在生成文件夹中执行以下cmake,即使该路径中存在工具链文件,也会出现此错误:

$ cmake -G"Unix Makefiles" \
      -DANDROID_ABI=arm64-v8a \
      -DANDROID_ARM_MODE=arm \
      -DANDROID_PLATFORM=android-${21} \
      -DANDROID_TOOLCHAIN=${gcc} \
      -DCMAKE_ASM_FLAGS="--target=aarch64-linux-android${21}" \
      -DCMAKE_TOOLCHAIN_FILE=$/home/ingrid/Android/android-ndk-r16b/build/cmake/android.toolchain.cmake \
       /home/ingrid/Ingrid/NeoReader/libjpeg-turbo-master/
输出:

CMake Error at /usr/share/cmake-3.5/Modules/CMakeDetermineSystem.cmake:104 (message):
  Could not find toolchain file:
  $/home/ingrid/Android/android-ndk-r16b/build/cmake/android.toolchain.cmake
Call Stack (most recent call first):
  CMakeLists.txt:7 (project)


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
-- The C compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- CMAKE_BUILD_TYPE = Release
-- VERSION = 2.0.3, BUILD = 20190707
-- 64-bit build (x86_64)
-- CMAKE_INSTALL_PREFIX = /opt/libjpeg-turbo
-- CMAKE_INSTALL_BINDIR = bin (/opt/libjpeg-turbo/bin)
-- CMAKE_INSTALL_DATAROOTDIR =  (/opt/libjpeg-turbo)
-- CMAKE_INSTALL_DOCDIR = doc (/opt/libjpeg-turbo/doc)
-- CMAKE_INSTALL_INCLUDEDIR = include (/opt/libjpeg-turbo/include)
-- CMAKE_INSTALL_LIBDIR = lib64 (/opt/libjpeg-turbo/lib64)
-- CMAKE_INSTALL_MANDIR = man (/opt/libjpeg-turbo/man)
-- Shared libraries enabled (ENABLE_SHARED = 1)
-- Static libraries enabled (ENABLE_STATIC = 1)
-- 12-bit JPEG support disabled (WITH_12BIT = 0)
-- Arithmetic decoding support enabled (WITH_ARITH_DEC = 1)
-- Arithmetic encoding support enabled (WITH_ARITH_ENC = 1)
-- TurboJPEG API library enabled (WITH_TURBOJPEG = 1)
-- TurboJPEG Java wrapper disabled (WITH_JAVA = 0)
-- In-memory source/destination managers enabled (WITH_MEM_SRCDST = 1)
-- Emulating libjpeg API/ABI v6.2 (WITH_JPEG7 = 0, WITH_JPEG8 = 0)
-- libjpeg API shared library version = 62.3.0
-- Compiler flags =  -O3 -DNDEBUG
-- Linker flags =  
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of size_t
-- Check size of size_t - done
-- Check size of unsigned long
-- Check size of unsigned long - done
-- Performing Test HAVE_BUILTIN_CTZL
-- Performing Test HAVE_BUILTIN_CTZL - Success
-- Looking for include file locale.h
-- Looking for include file locale.h - found
-- Looking for include file stdlib.h
-- Looking for include file stdlib.h - found
-- Looking for include file sys/types.h
-- Looking for include file sys/types.h - found
-- Looking for memset
-- Looking for memset - found
-- Looking for memcpy
-- Looking for memcpy - found
-- Check size of unsigned char
-- Check size of unsigned char - done
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Performing Test INCOMPLETE_TYPES
-- Performing Test INCOMPLETE_TYPES - Success
-- Compiler supports pointers to undefined structures.
-- Performing Test RIGHT_SHIFT_IS_UNSIGNED
-- Performing Test RIGHT_SHIFT_IS_UNSIGNED - Failed
-- Performing Test __CHAR_UNSIGNED__
-- Performing Test __CHAR_UNSIGNED__ - Failed
-- Performing Test INLINE_WORKS
-- Performing Test INLINE_WORKS - Success
-- INLINE = __inline__ __attribute__((always_inline)) (FORCE_INLINE = 1)
-- Performing Test HAVE_VERSION_SCRIPT
-- Performing Test HAVE_VERSION_SCRIPT - Success
-- Linker supports GNU-style version scripts
-- CMAKE_EXECUTABLE_SUFFIX = 
-- The ASM_NASM compiler identification is unknown
-- Found assembler: /usr/bin/nasm
-- CMAKE_ASM_NASM_COMPILER = /usr/bin/nasm
-- CMAKE_ASM_NASM_OBJECT_FORMAT = elf64
-- CMAKE_ASM_NASM_FLAGS =  -DELF -D__x86_64__ -DPIC 
-- SIMD extensions: x86_64 (WITH_SIMD = 1)
-- FLOATTEST = sse
-- RPM architecture = x86_64, DEB architecture = amd64
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    ANDROID_ABI
    ANDROID_ARM_MODE
    ANDROID_PLATFORM
    CMAKE_ASM_FLAGS


-- Build files have been written to: /home/ingrid/Ingrid/NeoReader/libjpeg-turbo-master/build-arm64-v8a
但是,如果我删除
-DANDROID_TOOLCHAIN=${gcc}\
-DCMAKE_TOOLCHAIN_FILE=$/home/ingrid/Android/Android-ndk-r16b/build/cmake/Android.TOOLCHAIN.cmake\
,那么我就能够生成.so文件,但它生成的是x86_64,而不是arm64_v8a。以下是cmake及其输出:

$ cmake -G"Unix Makefiles" \
      -DANDROID_ABI=arm64-v8a \
      -DANDROID_ARM_MODE=arm \
      -DANDROID_PLATFORM=android-${21} \
      -DCMAKE_ASM_FLAGS="--target=aarch64-linux-android${21}" \
       /home/ingrid/Ingrid/NeoReader/libjpeg-turbo-master/
输出:

CMake Error at /usr/share/cmake-3.5/Modules/CMakeDetermineSystem.cmake:104 (message):
  Could not find toolchain file:
  $/home/ingrid/Android/android-ndk-r16b/build/cmake/android.toolchain.cmake
Call Stack (most recent call first):
  CMakeLists.txt:7 (project)


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
-- The C compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- CMAKE_BUILD_TYPE = Release
-- VERSION = 2.0.3, BUILD = 20190707
-- 64-bit build (x86_64)
-- CMAKE_INSTALL_PREFIX = /opt/libjpeg-turbo
-- CMAKE_INSTALL_BINDIR = bin (/opt/libjpeg-turbo/bin)
-- CMAKE_INSTALL_DATAROOTDIR =  (/opt/libjpeg-turbo)
-- CMAKE_INSTALL_DOCDIR = doc (/opt/libjpeg-turbo/doc)
-- CMAKE_INSTALL_INCLUDEDIR = include (/opt/libjpeg-turbo/include)
-- CMAKE_INSTALL_LIBDIR = lib64 (/opt/libjpeg-turbo/lib64)
-- CMAKE_INSTALL_MANDIR = man (/opt/libjpeg-turbo/man)
-- Shared libraries enabled (ENABLE_SHARED = 1)
-- Static libraries enabled (ENABLE_STATIC = 1)
-- 12-bit JPEG support disabled (WITH_12BIT = 0)
-- Arithmetic decoding support enabled (WITH_ARITH_DEC = 1)
-- Arithmetic encoding support enabled (WITH_ARITH_ENC = 1)
-- TurboJPEG API library enabled (WITH_TURBOJPEG = 1)
-- TurboJPEG Java wrapper disabled (WITH_JAVA = 0)
-- In-memory source/destination managers enabled (WITH_MEM_SRCDST = 1)
-- Emulating libjpeg API/ABI v6.2 (WITH_JPEG7 = 0, WITH_JPEG8 = 0)
-- libjpeg API shared library version = 62.3.0
-- Compiler flags =  -O3 -DNDEBUG
-- Linker flags =  
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of size_t
-- Check size of size_t - done
-- Check size of unsigned long
-- Check size of unsigned long - done
-- Performing Test HAVE_BUILTIN_CTZL
-- Performing Test HAVE_BUILTIN_CTZL - Success
-- Looking for include file locale.h
-- Looking for include file locale.h - found
-- Looking for include file stdlib.h
-- Looking for include file stdlib.h - found
-- Looking for include file sys/types.h
-- Looking for include file sys/types.h - found
-- Looking for memset
-- Looking for memset - found
-- Looking for memcpy
-- Looking for memcpy - found
-- Check size of unsigned char
-- Check size of unsigned char - done
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Performing Test INCOMPLETE_TYPES
-- Performing Test INCOMPLETE_TYPES - Success
-- Compiler supports pointers to undefined structures.
-- Performing Test RIGHT_SHIFT_IS_UNSIGNED
-- Performing Test RIGHT_SHIFT_IS_UNSIGNED - Failed
-- Performing Test __CHAR_UNSIGNED__
-- Performing Test __CHAR_UNSIGNED__ - Failed
-- Performing Test INLINE_WORKS
-- Performing Test INLINE_WORKS - Success
-- INLINE = __inline__ __attribute__((always_inline)) (FORCE_INLINE = 1)
-- Performing Test HAVE_VERSION_SCRIPT
-- Performing Test HAVE_VERSION_SCRIPT - Success
-- Linker supports GNU-style version scripts
-- CMAKE_EXECUTABLE_SUFFIX = 
-- The ASM_NASM compiler identification is unknown
-- Found assembler: /usr/bin/nasm
-- CMAKE_ASM_NASM_COMPILER = /usr/bin/nasm
-- CMAKE_ASM_NASM_OBJECT_FORMAT = elf64
-- CMAKE_ASM_NASM_FLAGS =  -DELF -D__x86_64__ -DPIC 
-- SIMD extensions: x86_64 (WITH_SIMD = 1)
-- FLOATTEST = sse
-- RPM architecture = x86_64, DEB architecture = amd64
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    ANDROID_ABI
    ANDROID_ARM_MODE
    ANDROID_PLATFORM
    CMAKE_ASM_FLAGS


-- Build files have been written to: /home/ingrid/Ingrid/NeoReader/libjpeg-turbo-master/build-arm64-v8a
您能告诉我如何解决此工具链错误,以便生成arm64-v8a体系结构的libjpeg-turbo.so文件吗


谢谢。

您的cmake行中的以下参数是错误的:

...
-DCMAKE_TOOLCHAIN_FILE=$/home/ingrid/Android/android-ndk-r16b/build/cmake/android.toolchain.cmake \
...
$
符号告诉系统下面是一个环境变量。因此,您应该使用
-DCMAKE\u TOOLCHAIN\u FILE=$HOME/…
-DCMAKE\u TOOLCHAIN\u FILE=/HOME/ingrid/…

我不知道你从哪里得到这一行的文档,但它可能提到了上面的选项之一


顺便说一句,@Tsyvarev的建议是对的,他只是不知道背后的理由。

我对Android不是很熟悉,但是
$
登录
CMAKE_工具链文件
变量是什么意思?@Tsyvarev在文档中有$,所以我认为需要在路径之前添加命令提示符。我把它取了下来,效果很好!非常感谢你的帮助@Tsyvarev如果我理解正确,你的解决方案解决了OP的问题。考虑把它作为一个answer@IngridCooper考虑接受潜在的答案;p@MarcinK.当前位置提供一个我不理解的答案让我感到不舒服,即使这个答案突然起作用。解决他/她自己问题的人可以给出这样的答案:“我不知道原因,但这样做对我有用!”。但“这可能会有帮助,但我无法测试。”看起来并不是一个好答案。