NDK项目构建多个cmakefiles.txt

发布于 2025-01-18 16:53:29 字数 976 浏览 2 评论 0原文

我的目的是将libprebuilt.so和libmylib.So内置在APK中。 构造

    |-mylib_prebuilts
    |  |-libprebuilt.so
    |  |-include_dir
    |  '-CMakeFiles.txt
    |-mylib
    |  |-src
    |  '-CMakeFiles.txt
    '-build.gradle

我的项目在cmakefiles.txt中为mylib_prebuilts

add_library(prebuiltlib SHARED IMPORTED)
target_include_directories(prebuiltlib INTERFACE include_dir)
set_property(TARGET prebuiltlib PROPERTY IMPORTED_LOCATION libprebuilt.so)

,我有以下内容。在lib的cmakefiles.txt中,我有以下

add_subdirectory(../mylib_prebuilts mylib_prebuilts)
add_library(mylib SHARED ${srcs})
target_link_libraries(mylib PUBLIC prebuiltlib)

root gradle.build具有以下内容,

externalNativeBuild {
    cmake {
        version '3.18.1'
        path 'mylib/CMakeLists.txt'
    }
}

我无法从Mylib到达预构建的标题或库。我会收到“找不到标题”错误,或者使用include_directories(../ mylib_prebuilts/include_dir)手动添加标题路径,则构建在链接时找不到符号。

My intent is to have prebuilt libprebuilt.so and libmylib.so built into the apk. My project is structured like this

    |-mylib_prebuilts
    |  |-libprebuilt.so
    |  |-include_dir
    |  '-CMakeFiles.txt
    |-mylib
    |  |-src
    |  '-CMakeFiles.txt
    '-build.gradle

In the CMakeFiles.txt for mylib_prebuilts, I have the following.

add_library(prebuiltlib SHARED IMPORTED)
target_include_directories(prebuiltlib INTERFACE include_dir)
set_property(TARGET prebuiltlib PROPERTY IMPORTED_LOCATION libprebuilt.so)

In the CMakeFiles.txt for lib, I have the following

add_subdirectory(../mylib_prebuilts mylib_prebuilts)
add_library(mylib SHARED ${srcs})
target_link_libraries(mylib PUBLIC prebuiltlib)

The root gradle.build has the following

externalNativeBuild {
    cmake {
        version '3.18.1'
        path 'mylib/CMakeLists.txt'
    }
}

I cannot reach the prebuilt headers or library from mylib. I get "headers not found" error, or if I manually add the header path using include_directories(../mylib_prebuilts/include_dir), build cannot find symbols when linking.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魔法唧唧 2025-01-25 16:53:29

用我偶然发现的解决方案回答我自己的问题。

mylib_prebuilts/cmakelists.txt必须包含以下更改。

  1. 全局关键字添加到add_library调用。
  2. 改用绝对路径
    使用$ {make_current_source_dir} set_property调用的相对呼叫
    多变的
add_library(prebuiltlib SHARED IMPORTED GLOBAL)
target_include_directories(prebuiltlib INTERFACE include_dir)
set_property(TARGET prebuiltlib PROPERTY IMPORTED_LOCATION ${MAKE_CURRENT_SOURCE_DIR}/libprebuilt.so)

Answering my own question with a solution I stumbled upon.

mylib_prebuilts/CMakeLists.txt has to contain the following changes.

  1. Add GLOBAL keyword to add_library call.
  2. Use absolute path instead
    of relative for set_property call using ${MAKE_CURRENT_SOURCE_DIR}
    variable
add_library(prebuiltlib SHARED IMPORTED GLOBAL)
target_include_directories(prebuiltlib INTERFACE include_dir)
set_property(TARGET prebuiltlib PROPERTY IMPORTED_LOCATION ${MAKE_CURRENT_SOURCE_DIR}/libprebuilt.so)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文