HarmonyOS 鸿蒙Next JNI找不到头文件

HarmonyOS 鸿蒙Next JNI找不到头文件

用 Native C++ 进行开发, 在 CMakeLists.txt 中添加了包含目录,但是编译报错。请问 DevEco 哪里可以设置编译 包含目录吗?

9 回复

老哥你用是sdk几,为什么我的

更多关于HarmonyOS 鸿蒙Next JNI找不到头文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


老兄,我也是,请问你解决了吗,怎么解决的,

解决了,jni是java的,目前鸿蒙不支持了,只能用鸿蒙的make文件重新写,

包含 jni.h 的报错如何解决

具体步骤有吗?老兄。

这个报错具体怎么解决的,能分享一下吗?

target_link_libraries(entry libhilog_ndk.z.so liblua54.so)
target_link_libraries(entry libhilog_ndk.z.so lua54)

编译通过

> Task :entry:compileReleaseNativeWithCmake

Caching disabled for task ':entry:compileReleaseNativeWithCmake' because:
  Build cache is disabled

Task ':entry:compileReleaseNativeWithCmake' is not up-to-date because:
  Task has not declared any outputs despite executing actions.

-- The C compiler identification is Clang 10.0.1
-- The CXX compiler identification is Clang 10.0.1
-- Check for working C compiler: C:/Users/like/AppData/Local/Huawei/Sdk/native/3.0.0.0/llvm/bin/clang.exe
-- Check for working C compiler: C:/Users/like/AppData/Local/Huawei/Sdk/native/3.0.0.0/llvm/bin/clang.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Users/like/AppData/Local/Huawei/Sdk/native/3.0.0.0/llvm/bin/clang++.exe
-- Check for working CXX compiler: C:/Users/like/AppData/Local/Huawei/Sdk/native/3.0.0.0/llvm/bin/clang++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/like/DevEcoStudioProjects/MyApplication/entry/.cxx/release/arm64-v8a

[ninja] C:\Users\like\AppData\Local\Huawei\Sdk\native\3.0.0.0\build-tools\cmake\bin\ninja.exe -C C:\Users\like\DevEcoStudioProjects\MyApplication\entry\.cxx\release\arm64-v8a

ninja: Entering directory `C:\Users\like\DevEcoStudioProjects\MyApplication\entry\.cxx\release\arm64-v8a'

[1/2] Linking C shared library C:\Users\like\DevEcoStudioProjects\MyApplication\entry\build\intermediates\cmake\release\obj\arm64-v8a\liblua54.so

[2/2] Linking CXX shared library C:\Users\like\DevEcoStudioProjects\MyApplication\entry\build\intermediates\cmake\release\obj\arm64-v8a\libentry.so

FAILED: C:/Users/like/DevEcoStudioProjects/MyApplication/entry/build/intermediates/cmake/release/obj/arm64-v8a/libentry.so

cmd.exe /C "cd . && C:\Users\like\AppData\Local\Huawei\Sdk\native\3.0.0.0\llvm\bin\clang++.exe --target=aarch64-linux-ohos --gcc-toolchain=C:/Users/like/AppData/Local/Huawei/Sdk/native/3.0.0.0/llvm --sysroot=C:/Users/like/AppData/Local/Huawei/Sdk/native/3.0.0.0/sysroot -fPIC -g -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -Wa,--noexecstack -Wformat -Werror=format-security  -std=c++17 -O2 -DNDEBUG  --rtlib=compiler-rt -fuse-ld=lld -Wl,--build-id=sha1 -Wl,--warn-shared-textrel -Wl,--fatal-warnings -lunwind -Wl,--no-undefined -Qunused-arguments -Wl,-z,noexecstack -shared -Wl,-soname,libentry.so -o C:\Users\like\DevEcoStudioProjects\MyApplication\entry\build\intermediates\cmake\release\obj\arm64-v8a\libentry.so CMakeFiles/entry.dir/hello.cpp.o  -lhilog_ndk.z  -llua54  -lm && cd ."

ld.lld: error: unable to find library -llua54

clang++: error: linker command failed with exit code 1 (use -v to see invocation)

ninja: build stopped: subcommand failed.

Cmake thread

org.gradle.api.GradleException: native build cmake execute failed

    at jdk.internal.reflect.GeneratedConstructorAccessor499.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at com.huawei.ohos.build.utils.ProcessUtils.processWait(ProcessUtils.groovy:127)
    at jdk.internal.reflect.GeneratedMethodAccessor528.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at com.huawei.ohos.build.utils.ProcessUtils.execute(ProcessUtils.groovy:90)
    at com.huawei.ohos.build.utils.ProcessUtils.execute(ProcessUtils.groovy)
    at com.huawei.ohos.build.utils.ProcessUtils$execute$1.callCurrent(Unknown Source)
    at com.huawei.ohos.build.utils.ProcessUtils.execute(ProcessUtils.groovy:63)
    at com.huawei.ohos.build.utils.ProcessUtils$execute$0.callCurrent(Unknown Source)
    at com.huawei.ohos.build.utils.ProcessUtils.execute(ProcessUtils.groovy:59)
    at com.huawei.ohos.build.utils.ProcessUtils$execute.call(Unknown Source)
    at com.huawei.ohos.build.dsl.CmakeThread.executeCmakeBuild(CmakeThread.groovy:106)
    at com.huawei.ohos.build.dsl.CmakeThread.run(CmakeThread.groovy:57)

Exception in thread "Thread-1828" org.gradle.api.GradleException: native build cmake execute failed

    at jdk.internal.reflect.GeneratedConstructorAccessor499.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:72)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:277)
    at com.huawei.ohos.build.utils.ProcessUtils.processWait(ProcessUtils.groovy:127)
    at jdk.internal.reflect.GeneratedMethodAccessor528.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:193)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:61)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:203)
    at com.huawei.ohos.build.utils.ProcessUtils.execute(ProcessUtils.groovy:90)
    at com.huawei.ohos.build.utils.ProcessUtils.execute(ProcessUtils.groovy)
    at com.huawei.ohos.build.utils.ProcessUtils$execute$1.callCurrent(Unknown Source)
    at com.huawei.ohos.build.utils.ProcessUtils.execute(ProcessUtils.groovy:63)
    at com.huawei.ohos.build.utils.ProcessUtils$execute$0.callCurrent(Unknown Source)
    at com.huawei.ohos.build.utils.ProcessUtils.execute(ProcessUtils.groovy:59)
    at com.huawei.ohos.build.utils.ProcessUtils$execute.call(Unknown Source)
    at com.huawei.ohos.build.dsl.CmakeThread.executeCmakeBuild(CmakeThread.groovy:106)
    at com.huawei.ohos.build.dsl.CmakeThread.run(CmakeThread.groovy:57)

> Task :entry:compileReleaseNativeWithCmake FAILED

:entry:compileReleaseNativeWithCmake (Thread[Execution worker for ':',5,main]) completed. Took 31.432 secs.

Execution failed for task ':entry:compileReleaseNativeWithCmake'.

> native build cmake execute failed

* Try:

> Run with --stacktrace option to get the stack trace.
> Run with --debug option to get more log output.
> Run with --scan to get full insights.

开发者您好,麻烦您这边提供详细的日志,方便定位问题,具体操作点击Run with —info这里就可以看到了

欢迎开发小伙伴们进来帮帮楼主

针对“HarmonyOS 鸿蒙Next JNI找不到头文件”的问题,以下提供直接相关的解决方案:

在HarmonyOS(鸿蒙)系统中,如果在使用JNI(Java Native Interface)时遇到找不到头文件的问题,通常是因为环境配置或路径设置不正确。以下是一些可能的解决方法:

  1. 检查NDK路径:确保你的项目中正确配置了HarmonyOS的NDK路径。NDK包含了JNI所需的头文件和库文件。

  2. 更新或重新配置CMakeLists.txt:在你的CMake配置文件中,确保包含了正确的头文件搜索路径。例如,使用include_directories()函数来指定头文件所在的目录。

  3. 检查构建配置:在构建系统中(如DevEco Studio),检查你的构建配置是否指向了正确的NDK版本和路径。

  4. 环境变量:确保环境变量中包含了指向NDK的路径,这样编译器在查找头文件时能够正确定位。

  5. 清理和重建项目:有时候,简单的清理和重建项目可以解决路径或配置更新后未生效的问题。

如果以上方法均未能解决问题,可能是由于HarmonyOS版本更新导致的兼容性问题或其他未知原因。此时,建议直接联系官方客服以获取更专业的帮助。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部