我正在努力为Android交叉编译c++程序。
这是一个简单的控制台程序。
我的Cmake配置如下:
cmake_minimum_required(VERSION 3.4.1)
project(app)
set(NDK "/Users/user/Desktop/NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin")
set(CMAKE_CXX_FLAGS "")
set(CMAKE_C_COMPILER "${NDK}/clang")
set(CMAKE_CXX_COMPILER "${NDK}/armv7a-linux-androideabi16-clang++")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../Output")
file(GLOB Source "Source/*.cpp")
add_executable(${PROJECT_NAME} ${Source})
编译成功,最终我得到链接错误,像这样:
ld: error: unknown argument '-search_paths_first'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [../Output/app] Error 1
make[1]: *** [CMakeFiles/app.dir/all] Error 2
make: *** [all] Error 2
当我将armv7a-linux-androideabi16-clang++
编译器更改为clang++
时,我得到这样的错误:
ld: error: unknown argument '-dynamic', did you mean '-Bdynamic'
ld: error: unknown argument '-arch'
ld: error: unknown argument '-platform_version'
ld: error: unknown argument '-syslibroot'
ld: error: unknown argument '-search_paths_first'
ld: error: unable to find library -lto_library
ld: error: cannot open /Users/user/Desktop/NDK/toolchains/llvm/prebuilt/darwin-x86_64/lib/libLTO.dylib: No such file or directory
ld: error: cannot open x86_64: No such file or directory
ld: error: cannot open macos: No such file or directory
ld: error: cannot open 11.0.0: No such file or directory
ld: error: cannot open 11.3: No such file or directory
ld: error: cannot open /Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk: Is a directory
ld: error: CMakeFiles/app.dir/Source/Source.cpp.o: unknown file type
ld: error: unable to find library -lc++
ld: error: unable to find library -lSystem
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [../Output/app] Error 1
make[1]: *** [CMakeFiles/app.dir/all] Error 2
make: *** [all] Error 2
没有二进制文件在我的搜索路径,这可能是问题吗?
如果你不想使用上面评论中讨论的工具链文件,这种情况下的一个选择是欺骗cmake避免这些macOS特定的标志。根据我的测试,您可以使用-DCMAKE_SYSTEM_NAME=Linux
和-DANDROID=ON
来执行此操作