FUNC_SUB sub_func = (FUNC_SUB)dlsym(handle, "MyAdd");
int res = sub_func(a, b);
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
FUNC_SUB sub_func = (FUNC_SUB)dlsym(handle, "MyAdd");
int res = sub_func(a, b);
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
当使用 dlopen
打开 .so
文件并通过 dlsym
查找函数后调用该函数报错,可能的原因包括但不限于以下几点:
函数名称不匹配:
.so
文件中确实包含名为 "MyAdd"
的函数,并且该函数的名称没有由于编译器设置(如 C++ 的名称修饰)而发生变化。函数签名不匹配:
FUNC_SUB
类型定义与 MyAdd
函数的实际签名相匹配。例如,如果 MyAdd
函数接受两个 int
参数并返回一个 int
,则 FUNC_SUB
应定义为 typedef int (*FUNC_SUB)(int, int);
。动态库加载失败:
dlopen
的返回值 handle
是否为 NULL
,如果是,则调用 dlerror()
获取错误信息,可能的原因包括文件路径错误、库依赖问题或权限问题等。符号查找失败:
dlsym
后,应检查返回的指针是否为 NULL
,并调用 dlerror()
获取错误信息,确认是否成功找到了符号 "MyAdd"
。链接问题:
运行时环境:
LD_LIBRARY_PATH
),确保 .so
文件可以被正确找到和加载。如果以上检查都没有问题,但问题仍然存在,可能需要更详细地检查代码和库的兼容性,或者考虑使用调试工具(如 gdb
)来跟踪问题。
1 回答1.1k 阅读✓ 已解决
1 回答1.3k 阅读
1 回答1.2k 阅读
1 回答1.1k 阅读
1 回答1.1k 阅读
1 回答969 阅读
1 回答941 阅读
鸿蒙官网有三方库调用示例:https://developer.huawei.com/consumer/cn/doc/best-practices-V...