【问题标题】:CMake - libtiff cross-compilationCMake - libtiff 交叉编译
【发布时间】:2020-07-06 08:54:46
【问题描述】:

对于我的 Android 应用程序,我想移植需要 libtiff 的 C++ 代码。

我已经下载了libtiff 的源代码,我尝试编译它们以在不同架构中生成libtiff.so

  • arm64-v8a
  • armeabi-v7a
  • x86
  • x86_64

但我成功的只是生成了一个libtiff.dylib...

在前 4 种架构中,如何生成 .so 而不是 .dylib

这是我的命令行:

> cd libtiff
> mkdir install
> cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=install --enable-shared .
> make
> make install

注意:我在 Mac 上,编译的东西不是我最喜欢的主题^^

【问题讨论】:

  • MacOS 的主机编译器为 MacOS 创建二进制文件(例如,库具有 .dylib 扩展名)。要为其他架构生成二进制文件,您需要执行交叉编译。找到并安装一个交叉编译器,为它找到CMake toolchain(或手动编写工具链)并使用此工具链和-D选项为cmake
  • 哦,好的。对交叉编译器有什么建议吗?
  • 只需谷歌即可。例如。 “macos 交叉编译 x86 cmake”。
  • @Tsyvarev,我找到了使用 cmake & ninja 的解决方案,但我无法发布我的答案
  • 您的解决方案与 Android SDK 的常见交叉编译有显着不同吗?例如。就像那个问题一样:stackoverflow.com/questions/53385391/….

标签: cmake android-ndk shared-libraries libtiff


【解决方案1】:

我找到了一种使用 Android 工具交叉编译这个库的方法。

这里是生成的命令行,例如arm64-v8a版本

> [CMAKE_BIN_PATH]/cmake -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_PLATFORM=android-21 -DANDROID_NDK=[NDK_PATH] -DCMAKE_INSTALL_PREFIX=install -DCMAKE_TOOLCHAIN_FILE=[NDK_PATH]/build/cmake/android.toolchain.cmake  -DCMAKE_MAKE_PROGRAM=[CMAKE_BIN_PATH]/ninja -G Ninja
> [CMAKE_BIN_PATH]/ninja
> [CMAKE_BIN_PATH]/ninja install

或者,在单行版本中

> [CMAKE_BIN_PATH]/cmake -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_PLATFORM=android-21 -DANDROID_NDK=[NDK_PATH] -DCMAKE_INSTALL_PREFIX=install -DCMAKE_TOOLCHAIN_FILE=[NDK_PATH]/build/cmake/android.toolchain.cmake  -DCMAKE_MAKE_PROGRAM=[CMAKE_BIN_PATH]/ninja -G Ninja && [CMAKE_BIN_PATH]/ninja && [CMAKE_BIN_PATH]/ninja install

详细说明:

  • [CMAKE_BIN_PATH]是cmake的路径:/Library/Android/sdk/cmake/3.6.4111459/bin
  • [NDK_PATH] 是 NDK 的路径:/Library/Android/sdk/ndk-bundle
  • CMAKE_INSTALL_PREFIX 是指定安装目录的标志。就我而言,我决定在 libtiff 目录
  • 中创建 install 目录
  • CMAKE_TOOLCHAIN_FILE:如果一个标志指定要使用的工具链。使用 Android 工具链文件在 NDK 目录中,而不是在 cmake 目录中
  • CMAKE_MAKE_PROGRAM 是一个标志,用于指定 ninja 的路径,位于 cmake 目录中
  • -G 是指定构建系统生成器,这里是 Ninja

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2017-05-08
    • 2016-12-28
    • 2015-08-04
    • 2021-05-03
    • 2016-01-15
    相关资源
    最近更新 更多