CMake - libtiff 交叉编译
CMake - libtiff cross-compilation
对于我的 Android 应用程序,我想移植一个需要 libtiff 的 C++ 代码。
我已经下载了 libtiff 的源代码,我尝试编译它们以在不同的体系结构中生成 libtiff.so
:
- arm64-v8a
- armeabi-v7a
- x86
- x86_64
但我所成功的只是生成了一个 libtiff.dylib
...
如何生成 .so 而不是前 4 个架构中的 .dylib?
这是我的命令行:
> cd libtiff
> mkdir install
> cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=install --enable-shared .
> make
> make install
注:我在Mac,编译的东西不是我最喜欢的科目^^
我找到了一种使用 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:如果一个标志指定要使用的工具链。在 NDK 目录 中使用 Android 工具链文件 ,而不是在 cmake 目录
中
- CMAKE_MAKE_PROGRAM是指定ninja路径的flag,位于cmake目录
- -G是指定构建系统生成器,这里是Ninja
对于我的 Android 应用程序,我想移植一个需要 libtiff 的 C++ 代码。
我已经下载了 libtiff 的源代码,我尝试编译它们以在不同的体系结构中生成 libtiff.so
:
- arm64-v8a
- armeabi-v7a
- x86
- x86_64
但我所成功的只是生成了一个 libtiff.dylib
...
如何生成 .so 而不是前 4 个架构中的 .dylib?
这是我的命令行:
> cd libtiff
> mkdir install
> cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=install --enable-shared .
> make
> make install
注:我在Mac,编译的东西不是我最喜欢的科目^^
我找到了一种使用 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:如果一个标志指定要使用的工具链。在 NDK 目录 中使用 Android 工具链文件 ,而不是在 cmake 目录 中
- CMAKE_MAKE_PROGRAM是指定ninja路径的flag,位于cmake目录
- -G是指定构建系统生成器,这里是Ninja