Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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 在OpenCV上。C++;编译器无法编译简单的测试程序。使用铿锵++;_Android_C++_Opencv_Cmake_Ndk Build - Fatal编程技术网

Android 在OpenCV上。C++;编译器无法编译简单的测试程序。使用铿锵++;

Android 在OpenCV上。C++;编译器无法编译简单的测试程序。使用铿锵++;,android,c++,opencv,cmake,ndk-build,Android,C++,Opencv,Cmake,Ndk Build,目标:使用Conan和OpenCV的交叉编译构建脚本为Android编译外部库 我今天的环境: OS:MacOS High Sierra 10.13.6 柯南:1.7.3。/cillar/Conan/1.6.1/bin/Conan Python:2.7.10/usr/bin/Python(也尝试了3个) GCC/C++:8.2.0/opt/local/bin/GCC-mp-8 | | |/opt/local/bin/g++-mp-8(引用原因是clang使用C++) Clang/Clang++

目标:使用Conan和OpenCV的交叉编译构建脚本为Android编译外部库

我今天的环境:

  • OS:MacOS High Sierra 10.13.6
  • 柯南:1.7.3
    。/cillar/Conan/1.6.1/bin/Conan
  • Python:2.7.10
    /usr/bin/Python
    (也尝试了3个)
  • GCC/C++:8.2.0
    /opt/local/bin/GCC-mp-8 | | |/opt/local/bin/g++-mp-8
    (引用原因是clang使用C++)
  • Clang/Clang++:9.1.0
    /Applications/Xcode.app/Contents/Developer/toolschains/Xcode default.xctoolschain/usr/bin
    (这不是程序正在使用的)
  • CMake:3.12.2
    /Applications/CMake.app/Contents/bin/CMake
  • 使用的NDK:17

<强>问题:开放的CV不编译C++。主要信息是

-- The CXX compiler identification is Clang 6.0.2
-- The C compiler identification is Clang 6.0.2
-- Check for working CXX compiler: /Users/<user>/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++
-- Check for working CXX compiler: /Users/<user>/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ -- broken
CMake Error at /Applications/CMake.app/Contents/share/cmake-3.12/Modules/CMakeTestCXXCompiler.cmake:45 (message):
The C++ compiler

"/Users/<user>/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++"

is not able to compile a simple test program.

It fails with the following output:

Change Dir: /Users/<user>/.conan/data/OpenCV/3.4.1/ins/stable/build/4492059a128c69658616e0cf3d3f007e2ce6603c/CMakeFiles/CMakeTmp

Run Build Command:"/Users/<user>/Library/Android/sdk/cmake/3.6.4111459/bin/ninja" "cmTC_4338c"
[1/2] Building CXX object CMakeFiles/cmTC_4338c.dir/testCXXCompiler.cxx.o
[2/2] Linking CXX executable cmTC_4338c
FAILED: : && /Users/<user>/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --sysroot=/Users/<user>/Library/Android/sdk/ndk-bundle/sysroot   -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/cmTC_4338c.dir/testCXXCompiler.cxx.o  -o cmTC_4338c   && :
ld: library not found for -lc++
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

CMake will not be able to correctly generate this project.
我已经尝试过的

关于构建脚本

compiler=clang
compiler.version=5.0
compiler.libcxx=libc++
os=Android
os.api_level=21
arch=armv7
Obs:Gcc已被弃用,因此不使用它将是一个很好的解决方案,但仍然不起作用

compiler=gcc
compiler.version=4.9
compiler.libcxx=libstdc++
os=Android
os.api_level=21
arch=armv7
build_type=Release
在Android.cmake上:

cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
include_directories("/usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0")
include_directories( "/usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0/x86_64-apple-darwin17.7.0/bits")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I /usr/local/include/c++/8.2.0/")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -X /usr/include/c++/4.2.1/")
set(CMAKE_CXX_STANDARD 11)
set(CXX_STANDARD_REQUIRED)
set(CMAKE_CXX_COMPILER "/usr/bin/g++")
set(CMAKE_CXX_COMPILER "/Users/vcanato/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++")
set(CMAKE_C_COMPILER "/usr/bin/gcc")
set(ANDROID_ABI arm64-v8a)
set(CMAKE_ANDROID_API android-21)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_TOOLCHAIN_FILE /Users/<user>/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake)

set(CMAKE_ANDROID_NDK /Users/<user>/Library/Android/sdk/ndk-bundle/ CACHE FILEPATH "")
project()之前和之后

工具链:

/Users/vcanato/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9
/Users/vcanato/Library/Android/sdk/ndk-bundle/toolchains/x86_64-4.9
我甚至尝试建立自己的和使用

有关Stack和GitHub的类似问题:


在工具链中指定CMAKE_MAKE_命令的正确方法是设置缓存变量:

set(CMAKE_MAKE_PROGRAM /Users/vcanato/Library/Android/sdk/cmake/3.6.4111459/bin/ninja
    CACHE FILEPATH "")
这意味着(如果变量是由生成器设置的,则设置缓存版本)和

更多解释 消息中第一个字符串为空

Make command was: "" "cmTC_27ba1"
应该是“出了问题”的第一个信号。它应该是与CMake生成器对应的可执行文件(或可执行文件的绝对路径),而不是空字符串。在您的情况下,生成器的可执行文件是
ninja

通常,CMake会以更具描述性的方式发出有关问题的信号:

未设置CMAKE_MAKE_程序


消息“无法编译简单的测试程序”不是主消息(至少,它不是唯一的“主”消息)。它应该是一行(如第一个问题参考中所述)“输出失败:”,之后您将找到编译失败的确切原因。@Tsyvarev感谢您的帮助。我刚刚编辑了您询问的消息,但看起来与之前的消息相同,谢谢您的任何想法。嗯,不,消息
没有这样的文件或目录
在您的日志中是新的。消息
Make命令是:“cmTC_27ba1”
看起来可疑:它应该是
ninja
(或它的绝对路径),而不是空的引号字符串。注意,设置
set(CMAKE\u MAKE\u PROGRAM/ninja)
是错误的:您需要设置缓存变量:
set(CMAKE\u MAKE\u PROGRAM/ninja CACHE FILEPATH“”)
。如果要解决其他问题,需要发布完整的工具链文件。您列出了两个编译器,在
CMakeLists.txt
中设置了另一个编译器,但可能是因为工具链的缘故,CMake使用了另一个编译器。@Tsyvarev这是我现在的完整工具链文件。后来我又把我插进去的东西推了进去,但没什么区别,所以我就把它移走了。我的
CMakeList.txt
没有编译器,它将作为交叉编译器工作。我应该在缓存文件路径中放置什么路径?忍者?同样?@Tsyvarev you是对的,
Android.cmake
在构建脚本中用作工具链文件。(第5行buildscript.py)。我没有设置
CMAKE\u工具链\u文件
CMAKE\u构建类型
,您查看了“我已经尝试过的”会话。这不是现在的文件,当我创建这篇文章时,文件只有两个“SET”对不起,删除了右边的勾号,我以为问题出在另一个地方,但仍然在同一个地方。但是现在,我在您的右击之后添加了更多关于
缓存文件路径的信息
/Users/vcanato/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9
/Users/vcanato/Library/Android/sdk/ndk-bundle/toolchains/x86_64-4.9
set(CMAKE_MAKE_PROGRAM /Users/vcanato/Library/Android/sdk/cmake/3.6.4111459/bin/ninja
    CACHE FILEPATH "")
Make command was: "" "cmTC_27ba1"