ARM相当于“--exclude-libs ALL”

时间:2014-08-31 06:27:46

标签: arm options ld

是否有ld(1)选项在ARM平台上提供等效的--exclude-libs ALL

我试图减少Android上共享对象的大小,但--exclude-libs ALL仅适用于x86。


编辑:这就是我问的原因。抱歉这个额外的细节。我试图让问题简短。我的共享对象导出任何Crypto ++符号,但是88显示 没有 --exclude-libs ALL

以下是感兴趣的内容:

$ echo $CXX
arm-linux-androideabi-g++
$ echo $ANDROID_STL_INC
/opt/android-ndk-r9/sources/cxx-stl/stlport/stlport/
$ echo $ANDROID_SYSROOT
/opt/android-ndk-r9/platforms/android-9/arch-arm

首先,在没有 --exclude-libs ALL的情况下构建我的共享对象

$ $CXX -fPIC -Os -I/usr/local/cryptopp-android-9/include -I$ANDROID_STL_INC
    --sysroot=$ANDROID_SYSROOT com_deltoid_androidprng_PRNG.cpp
    -o libprng.so -shared

然后计算Crypto ++导出的数量:

$ arm-linux-androideabi-nm --defined-only libprng.so | grep -i cryptopp | wc -l
      88

第二,同样的实验 --exclude-libs ALL

$ $CXX -fPIC -Os -I/usr/local/cryptopp-android-9/include -I$ANDROID_STL_INC
    --sysroot=$ANDROID_SYSROOT com_deltoid_androidprng_PRNG.cpp
    -o libprng.so -shared -Wl,--exclude-libs,ALL

然后计算Crypto ++导出的数量:

$ arm-linux-androideabi-nm --defined-only libprng.so | grep -i cryptopp | wc -l
      88

在这两种情况下,都会导出88个Crypto ++符号。源文件如下所示,它不会导出任何Crypto ++符号。


#include <string.h>
#include <jni.h>

#include <cryptopp/osrng.h>
using CryptoPP::AutoSeededRandomPool;

#include "com_deltoid_androidprng_PRNG.h"

static AutoSeededRandomPool& GetPRNG()
{
    static AutoSeededRandomPool prng;

    return prng;
}

static int IncorporateSensors()
{
    return 0;
}

/*
 * Class:     com_deltoid_androidprng_PRNG
 * Method:    CryptoPP_Reseed
 * Signature: ([B)I
 */
jint JNICALL Java_com_deltoid_androidprng_PRNG_CryptoPP_1Reseed
  (JNIEnv* env, jclass, jbyteArray seed)
{
    int ret, consumed = 0;

    try
    {
        AutoSeededRandomPool& prng = GetPRNG();

        if(env)
        {   
            jbyte* bytes = env->GetByteArrayElements(seed, 0);
            jint length = env->GetArrayLength(seed);

            if(bytes)
            {
                if(length >= 0)
                {
                    prng.IncorporateEntropy((const byte*)bytes, (size_t)length);
                    consumed += length;
                }

                env->ReleaseByteArrayElements(seed, bytes, JNI_ABORT);
            }                   
        }        
    }
    catch(const CryptoPP::Exception& ex)
    {
    }

    return consumed;
}

/*
 * Class:     com_deltoid_androidprng_PRNG
 * Method:    CryptoPP_GetBytes
 * Signature: ([B)I
 */
JNIEXPORT jint JNICALL Java_com_deltoid_androidprng_PRNG_CryptoPP_1GetBytes
  (JNIEnv *, jclass, jbyteArray)
{    
}

1 个答案:

答案 0 :(得分:2)

我非常确定--exclude-libs的Android / ARM版本支持ld,因为他们使用themselves as well

您是否在Android.mk文件中尝试了以下内容?

LOCAL_LDFLAGS += -Wl,--exclude-libs,ALL