Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ nm实用程序获取中定义的内容。因此文件返回错误_C++_Macos_Shared Libraries_Nm - Fatal编程技术网

C++ nm实用程序获取中定义的内容。因此文件返回错误

C++ nm实用程序获取中定义的内容。因此文件返回错误,c++,macos,shared-libraries,nm,C++,Macos,Shared Libraries,Nm,我需要在.so文件中定义符号。我使用最新的Mac OS,我会这样做: /usr/bin/nm -gC libs/armeabi/libhello.so 错误:/Applications/Xcode.app/Contents/Developer/toolschains/Xcode默认值.xctoolschain/usr/bin/nm:无效参数-C 用法:/Applications/Xcode.app/Contents/Developer/toolschains/XcodeDefault.x

我需要在.so文件中定义符号。我使用最新的Mac OS,我会这样做:

 /usr/bin/nm  -gC libs/armeabi/libhello.so 
错误:/Applications/Xcode.app/Contents/Developer/toolschains/Xcode默认值.xctoolschain/usr/bin/nm:无效参数-C 用法:/Applications/Xcode.app/Contents/Developer/toolschains/XcodeDefault.xctoolschain/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;
}
#包括
#包括
#包括
jint NativeAddition(JNIEnv*pEnv、jobject pObj、jint pa、jint pb)
{
返回pa+pb;
}
jint NativeMultiplication(JNIEnv*pEnv,jobject pObj,jint pa,
金特(铅){
返回pa*pb;
}
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM*pVm,void*reserved)
{
JNIEnv*env;
if((*pVm)->GetEnv(pVm,(void**)和env,JNI_版本1_6)){
返回-1;}
jniationalmethodnm[2];
nm[0]。name=“NativeAddition”;
nm[0]。签名=“(II)I”;
nm[0].fnPtr=NativeAddition;
nm[1]。name=“NativeMultiplication”;
nm[1]。签名=“(II)I”;
nm[1],fnPtr=native乘法;
jclass cls=(*env)->FindClass(env,“com/example/hellondk/HelloNDKActivity”);
//使用env->RegisterNatives注册方法。
(*env)->注册号(env、cls、nm、2);
返回JNI_版本_1_6;
}
此示例来自Android本机开发工具包Cookbook

这里还有我的
nm

用法: /Applications/Xcode.app/Contents/Developer/toolschains/XcodeDefault.xctoolschain/usr/bin/nm [-agnoprouumxjlfap[s segname sectname][-][-t格式][[-arch ]…][文件…]


安装macports,然后使用macports运行
端口安装binutils


最后,在OSX中运行
gobjdump-p app

,不存在用于请求符号的
-C
选项

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

您可以改为或调用它,如上所示。

我有一个.so文件,它只包含两个函数。当我编写§nm-g libhello.so§时,它不打印任何内容。因此,它在管道后不打印任何内容。删除
-g
选项:)再次不打印任何内容。什么是-g选项?这有关系吗。那么文件是为JNI编写的?@Narek,the
 -g
选项将仅显示全局(外部)符号(主要用于DYLIB等)。您可能需要安装
c++filt
,尽管它通常包含在XCode命令行工具中-哪个c++filt的输出是什么?我在这里有这个工具:
/usr/bin/c++filt
。问题是
nm libs/armeabi/libhello。所以
不打印任何内容。在这种情况下,我应该不使用任何内容通过管道连接到
c++filt
,显然,它不应该打印任何内容。