diff options
| author | ruki <[email protected]> | 2020-02-12 23:14:03 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-02-12 13:24:19 +0800 |
| commit | 7b08be3acbeeb49f691302ee9262a053171c70d5 (patch) | |
| tree | 897ba8f5f155a9b817379df864393df227057690 | |
| parent | ed630a48d2359dded29af7815f03604534b78f67 (diff) | |
fix linker errors for android ndk on windows
| -rw-r--r-- | CHANGELOG.md | 2 | ||||
| -rw-r--r-- | xmake/modules/detect/sdks/find_ndk.lua | 16 | ||||
| -rw-r--r-- | xmake/platforms/android/config.lua | 8 | ||||
| -rw-r--r-- | xmake/platforms/android/load.lua | 9 |
4 files changed, 29 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 058a99be2..21501bcc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ * Fix incremental compilation for checking the dependent file * Fix log output for parsing xmake-vscode/problem info +* [#684](https://github.com/xmake-io/xmake/issues/684): Fix linker errors for android ndk on windows ## v2.2.9 @@ -691,6 +692,7 @@ * 修复增量编译检测依赖文件的一些问题 * 修复log输出导致xmake-vscode插件解析编译错误信息失败问题 +* [#684](https://github.com/xmake-io/xmake/issues/684): 修复windows下android ndk的一些linker错误 ## v2.2.9 diff --git a/xmake/modules/detect/sdks/find_ndk.lua b/xmake/modules/detect/sdks/find_ndk.lua index 7b8114f35..70801d697 100644 --- a/xmake/modules/detect/sdks/find_ndk.lua +++ b/xmake/modules/detect/sdks/find_ndk.lua @@ -153,8 +153,21 @@ function _find_ndk(sdkdir, arch, ndk_sdkver, ndk_toolchains_ver) return {} end + -- get ndk version, e.g. r16b, .. + local ndkver = nil + local ndk_version_header = path.join(sdkdir, "sysroot/usr/include/android/ndk-version.h") + if os.isfile(ndk_version_header) then + local ndk_version_info = io.readfile(ndk_version_header) + if ndk_version_info then + ndk_version_info = ndk_version_info:match("#define __NDK_MAJOR__ (%d+)") + if ndk_version_info then + ndkver = tonumber(ndk_version_info) + end + end + end + -- ok? - return {sdkdir = sdkdir, bindir = bindir, cross = cross, sdkver = sdkver, gcc_toolchain = gcc_toolchain, toolchains_ver = toolchains_ver} + return {ndkver = ndkver, sdkdir = sdkdir, bindir = bindir, cross = cross, sdkver = sdkver, gcc_toolchain = gcc_toolchain, toolchains_ver = toolchains_ver} end -- find ndk toolchains @@ -193,6 +206,7 @@ function main(sdkdir, opt) -- save to config config.set("ndk", ndk.sdkdir, {force = true, readonly = true}) + config.set("ndkver", ndk.ndkver, {force = true, readonly = true}) config.set("ndk_sdkver", ndk.sdkver, {force = true, readonly = true}) config.set("ndk_toolchains_ver", ndk.toolchains_ver, {force = true, readonly = true}) diff --git a/xmake/platforms/android/config.lua b/xmake/platforms/android/config.lua index c69eb6b94..a51eac6b0 100644 --- a/xmake/platforms/android/config.lua +++ b/xmake/platforms/android/config.lua @@ -95,14 +95,14 @@ function _toolchains() as:add({name = "gcc", cross = cross}, "clang") -- init the linker - ld:add({name = "gcc", cross = cross}) ld:add({name = "g++", cross = cross}) - ld:add("clang", "clang++") + ld:add({name = "gcc", cross = cross}) + ld:add("clang++", "clang") -- init the shared library linker - sh:add({name = "gcc", cross = cross}) sh:add({name = "g++", cross = cross}) - sh:add("clang", "clang++") + sh:add({name = "gcc", cross = cross}) + sh:add("clang++", "clang") -- init the static library archiver ar:add({name = "ar", cross = cross, pathes = gcc_toolchain_bin}, "llvm-ar") diff --git a/xmake/platforms/android/load.lua b/xmake/platforms/android/load.lua index 4e3146965..7975bdba4 100644 --- a/xmake/platforms/android/load.lua +++ b/xmake/platforms/android/load.lua @@ -82,6 +82,7 @@ function main(platform) -- add flags for the sdk directory of ndk local ndk = config.get("ndk") + local ndkver = config.get("ndkver") local ndk_sdkver = config.get("ndk_sdkver") if ndk and ndk_sdkver then @@ -258,7 +259,13 @@ function main(platform) platform:add("ldflags", "-lstlport_shared") platform:add("shflags", "-lstlport_shared") end - + + -- fix 'ld: error: cannot find -lc++' for clang++.exe on r20/windows + -- @see https://github.com/xmake-io/xmake/issues/684 + if ndkver and ndkver >= 20 and ndk_cxxstl:startswith("llvmstl") then + platform:add("ldflags", "-nostdlib++") + platform:add("shflags", "-nostdlib++") + end end end |
