ld.lld: error: duplicate symbol: hspArkTSAdd(napi_env__, napi_callback_info__)

defined at napi_init.cpp:31 (DevEcoStudioProjects/NativeHSP/library/src/main/cpp/napi_init.cpp:31)
CMakeFiles/library.dir/napi_init.cpp.o:(hspArkTSAdd(napi_env__, napi_callback_info__))
defined at napi_hsp.cpp:28 (DevEcoStudioProjects/NativeHSP/library/src/main/cpp/napi_hsp.cpp:28)
CMakeFiles/library.dir/napi_hsp.cpp.o:(.text.Z11hspArkTSAddP10napi_env__P20napi_callback_info_+0x0)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
链接器报错显示 hspArkTSAdd 函数出现了重复定义,这是典型的多重定义错误。下面为你详细分析并给出解决办法。
错误原因分析
错误信息 duplicate symbol: hspArkTSAdd(napi_env__, napi_callback_info__) 表明:

hspArkTSAdd 函数在两个不同的源文件(napi_init.cpp 和 napi_hsp.cpp)中都有定义。
当链接器尝试将这两个目标文件合并成一个共享库(liblibrary.so)时,发现了重复的符号,从而报错。
解决办法

  1. 检查重复定义
    要确保 hspArkTSAdd 函数只在一个源文件中定义。查看 napi_init.cpp 和 napi_hsp.cpp 文件,找到这两个文件中重复的函数定义。
    示例错误代码:

cpp
运行
// napi_init.cpp (line 31)
napi_value hspArkTSAdd(napi_env env, napi_callback_info info) {
// 函数实现
}

// napi_hsp.cpp (line 28)
napi_value hspArkTSAdd(napi_env env, napi_callback_info info) {
// 函数实现(和上面重复)
}

修正方法:
保留其中一个定义,删除另一个。比如只在 napi_hsp.cpp 中保留定义:

cpp
运行
// napi_hsp.cpp
napi_value hspArkTSAdd(napi_env env, napi_callback_info info) {
// 函数实现
}

// napi_init.cpp
// 删除重复的hspArkTSAdd定义

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐