在 Mac 上交叉编译 Android C++程序使用 NDK 的 clang 失败



我正在努力为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来执行此操作

最新更新