0

我需要获取 .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 格式] [[-arch ] ...] [file ...]

据我了解,这是另一个 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 ] ...] [文件 ...]

4

2 回答 2

1

在 OS X 中,-C不存在用于去除符号的选项。

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

您可以改为使用 c++filt 作为包装器或调用它,如上所示。

于 2014-06-01T03:17:55.767 回答
0

安装 macports,然后使用 macports 运行port install binutils

最后,运行gobjdump -p app

于 2014-06-01T00:41:31.573 回答