相关疑难解决方法(0)

如何在CMakeLists.txt中设置LDFLAGS?

我通过CMAKE_C_FLAGS在CMake中设置了CFLAGS.是这样设置LDFLAGS?

gcc makefile cmake ld ldflags

61
推荐指数
4
解决办法
10万
查看次数

armeabi-v7a的Android NDK链接器失败:"PLT偏移太大,尝试使用--long-plt链接"

在尝试构建已签名的APK时,它会以~100行重复失败:

Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: PLT offset too large, try linking with --long-plt
Run Code Online (Sandbox Code Playgroud)

我在参数中添加了--long-plt:

externalNativeBuild {
    cmake {
        ...
        arguments '-DANDROID_STL=c++_static', '-Wl,--long-plt'
        cppFlags "-frtti -fexceptions", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_shared"
    }
}
Run Code Online (Sandbox Code Playgroud)

但它似乎没有改变任何东西.

它适用于非签名(调试)apk生成并使用arm64-v8a.

我正在处理> 1GB的本机代码,所以我猜这是主要原因.

似乎几乎没有关于此的文档或搜索结果.

是否--long-plt需要在其他地方放?如果没有,是否有其他设置可以更改?或者将代码拆分成单独的库有帮助吗?

这是CMakeLists.txt供参考:

string(REPLACE "." "/" JAVA_GEN_SUBDIR ${JAVA_GEN_PACKAGE})
set(JAVA_GEN_DIR ${Project_SOURCE_DIR}/src/main/java/${JAVA_GEN_SUBDIR}/../../../../../generated)

# configure import libs
set(distribution_DIR ${PROJECT_SOURCE_DIR}/distribution)

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)

# Note: One could use a 'GLOB' here, but newly added source files won't …
Run Code Online (Sandbox Code Playgroud)

android cmake android-ndk llvm-clang

5
推荐指数
1
解决办法
293
查看次数

标签 统计

cmake ×2

android ×1

android-ndk ×1

gcc ×1

ld ×1

ldflags ×1

llvm-clang ×1

makefile ×1