我需要获取.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 segname sectname] [ - ] [-t format] [[-arch] ...] [档案......]
据我所知,这是另一种nm实用程序?它与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 Cookbook。
此处还有我nm
使用方法: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm [-agnopruUmxjlfAP [s segname sectname] [ - ] [-t format] [[-arch ] ...] [文件...]
答案 0 :(得分:1)
在OS X中,没有用于解码符号的-C
选项。
# nm libs/armeabi/libhello.so | c++filt -p -i
您可以改为use c++filt as a wrapper或如上所示调用它。
答案 1 :(得分:0)
安装macports,然后使用macports运行port install binutils
。
最后,运行gobjdump -p app