今天在调试安卓程序的时候,启动过程中,提示:Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=...} 之后卡住,当时Eclipse没办法从logcat获取调试信息,网上找了无数的帖子,都没有解决问题,不得已,只能将工程从Eclipse迁移到Android Studio,希望能从Android Studio中获取到足够的调试信息。在经过一天的折腾之后,终于将项目迁移到Android Studio内顺利编译通过,在安装加载包的时候,我终于从Logcat获取到了当时的调试信息,看到有这么一个异常:

2021-02-06 21:27:58.637 16851-16851/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.elapsing.mass, PID: 16851
    java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZN4nova19tagUnitMotionTargetC1Ev" referenced by "/data/app/org.elapsing.mass-E3y_ESJlLla3l0Itpt0ODg==/lib/arm/libMyGame.so"...

这个异常之后,就是强制退出的提示:2021-02-06 21:27:58.647 1169-2122/? W/ActivityManager:   Force finishing activity org.elapsing.mass/org.cocos2dx.cpp.AppActivity

这个异常是加载动态链接库的时候,有一个本地的符号找不到:tagUnitMotionTarget,这是另外一个工程的结构体,仔细搜索了全部代码,发现,在这个项目的序列化预定义头文件中,定义了这个结构体:

struct tagUnitMotionTarget;

但是之前以为这个结构体在这个工程内用不上,于是没有加入这个结构体的头文件。所以动态链接库中找不到这个类的符号!

找到原因,将这个结构体文件加入mk文件内,重新编译,于是问题就解决了。

如果无法启动,除了常规操作,还必须检查自己的so内是否有没有符号的缺失。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐