Утилита nm, чтобы получить то, что определено в файле.so, возвращает ошибку

Мне нужно получить символы, определенные в файле.so. Я использую последнюю Mac OS, и я делаю это:

 /usr/bin/nm  -gC libs/armeabi/libhello.so 

ошибка: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: неверный аргумент -C Использование: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm [-agnopruUmxjlfAP[имя сегмента s] [-] [-t формат] [[-arch]...] [файл...]

Как я понял это еще одна нм утилита? Это связано с XCode? Как исправить эту проблему?

РЕДАКТИРОВАТЬ: Добавление кода, из которого создается файл.so.

#include <android/log.h>
#include <stdio.h>
#include <jni.h>

       jint NativeAddition(JNIEnv *pEnv, jobject pObj, jint pa, jint pb)
       {
         return pa+pb;
       }

       jint NativeMultiplication(JNIEnv *pEnv, jobject pObj, jint pa,
       jint pb) {
         return pa*pb;
       }

       JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* pVm, void* reserved)
       {
           JNIEnv* env;
           if ((*pVm)->GetEnv(pVm, (void **)&env, JNI_VERSION_1_6)) {
return -1; }
           JNINativeMethod nm[2];
           nm[0].name = "NativeAddition";
           nm[0].signature = "(II)I";
           nm[0].fnPtr = NativeAddition;
           nm[1].name = "NativeMultiplication";
           nm[1].signature = "(II)I";
           nm[1].fnPtr = NativeMultiplication;
           jclass cls = (*env)->FindClass(env, "com/example/hellondk/HelloNDKActivity");
           // Register methods with env->RegisterNatives.
           (*env)->RegisterNatives(env, cls, nm, 2);
           return JNI_VERSION_1_6;
}

Этот пример взят из поваренной книги Android Native Development Kit.

А также вот сообщение об использовании моего nm

Использование: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm [-agnopruUmxjlfAP [имя сегмента s] [-] [-t format] [[-arch]...] [ файл...]

2 ответа

Решение

В OS X -C опция для разборки символов отсутствует.

# nm libs/armeabi/libhello.so | c++filt -p -i

Вместо этого вы можете использовать C++ Filter в качестве оболочки или вызывать его, как показано выше.

Установите macports и затем, используя macports, запустите port install binutils,

Наконец, беги gobjdump -p app

Другие вопросы по тегам