大佬,这是那个飞桨ocr我按照你的方法打的moudel包,抱这种问题怎么解决ld: error: found local symbol '_edata' in global part of symbol table in file E:/Android/Car_Paddle/Car/paddle/src/main/cpp/../../../PaddleLite/cxx/libs/arm64-v8a/libpaddle_light_api_shared.so,在官方demo是可以运行的,而且我引用其他model的时候没有这样的问题
5条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
这个错误是由于动态链接库(.so文件)中的符号冲突导致的。在Android构建过程中,编译器发现了全局符号表中本地定义的
_edata符号,这通常是可执行文件数据段结束地址的标记。要解决这个问题,你需要检查是否有多个库包含相同的符号。在这种情况下,最可能的原因是你同时链接了静态库和共享库,其中都包含了
_edata符号。解决步骤如下:
-
确保只链接一个版本的Paddle Lite库。如果你之前同时链接了静态库和动态库,去掉其中一个。通常,在Android项目中,我们推荐使用动态库(.so 文件)以减小最终APK的大小。
-
检查你的CMakeLists.txt文件,确保你没有意外地添加了重复的库依赖。你应该看到类似这样的内容来链接动态库:
find_library(PADDLE_LITE_LIB lite-lite) target_link_libraries(your_target ${PADDLE_LITE_LIB})-
如果你是在C++代码中硬编码了链接,比如使用
-lpaddle_lite等选项,确保只在一个地方进行了链接。 -
如果以上步骤都无法解决问题,你可能需要查看Paddle Lite的源码,确认是否存在多个实现
_edata的地方。如果是这样,可能需要联系PaddlePaddle社区寻求帮助,看是否可以提供一个修复这个问题的版本。 -
最后,尝试清理缓存并重新构建你的项目,有时候问题可能是由于缓存引起的。在Android Studio中,可以通过菜单栏的
Build->Clean Project和Rebuild Project来完成这一步。
请按照上述步骤进行操作,并根据需要调整代码片段以适应你的具体项目结构。如果问题仍然存在,请提供更多的上下文信息,以便我能更准确地帮助你。
评论 打赏 举报 编辑记录解决 1无用-