Мне нужно получить символы, определенные в файле .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 format] [[-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 формат] [[-arch
] …] [файл …]
В OS X -C
опция для разборки символов отсутствует.
# nm libs/armeabi/libhello.so | c++filt -p -i
Вы можете вместо используйте C ++ Filter в качестве оболочки или вызовите его, как показано выше.
Установите macports и затем, используя macports, запустите port install binutils
,
Наконец, беги gobjdump -p app