cmake 用猎人为android构建增强

ryoqjall  于 2022-11-24  发布在  Android
关注(0)|答案(1)|浏览(181)

我的烦恼如下。
我的CMake与Hunter集成了一个增强功能:

include(cmake/HunterGate.cmake)
cmake_host_system_information(RESULT HUNTER_JOBS_NUMBER QUERY NUMBER_OF_LOGICAL_CORES)
HunterGate(
    URL "https://github.com/cpp-pm/hunter/archive/v0.24.0.tar.gz"
    SHA1 "a3d7f4372b1dcd52faa6ff4a3bd5358e1d0e5efd"
    LOCAL
)

set(Boost_USE_STATIC_LIBS        ON)
set(Boost_USE_DEBUG_LIBS        OFF)  # ignore debug libs and
set(Boost_USE_RELEASE_LIBS       ON)  # only find release libs
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
set(BOOST_COMPONENTS)
list(APPEND BOOST_COMPONENTS system program_options)
hunter_add_package(Boost COMPONENTS ${BOOST_COMPONENTS})
find_package(Boost CONFIG COMPONENTS ${BOOST_COMPONENTS})

我使用以下参数在linux Ubuntu for android上构建我的项目:

config-android : _android
    cd $< && cmake \
                -DCMAKE_BUILD_TYPE=RelWithDebInfo \
                -DCMAKE_SYSTEM_NAME=Android \
                -DCMAKE_TOOLCHAIN_FILE=$(NDK)/build/cmake/android.toolchain.cmake \
                -DANDROID_ABI=$(ABI) \
                -DANDROID_PLATFORM=android-$(MINSDKVERSION) \
                -DANDROID_TARGET=$(TARGET) \
                ..

如果我赋值$ABI= armeabi-v7 a,一切都正常了。

[ 75%] Performing build step for 'Boost-system'
Performing configuration checks

    - default address-model    : 32-bit [1]
    - default architecture     : arm [1]

Building the Boost C++ Libraries.

但是,如果分配任何其他接口,例如,$ABI=x86_64,我会有一个错误:

ld: error: /home/vitali/.hunter/_Base/a3d7f43/0db57b3/73320e1/Install/lib/libboost_program_options-mt-a64.a(cmdline.o) is incompatible with elf_x86_64

我怀疑这个错误的原因是猎人没有为指定的ABI建立助推器。正如我所看到的,它显示了与手臂ABI相同的配置:

[ 75%] Performing build step for 'Boost-system'
Performing configuration checks

    - default address-model    : 32-bit [1]
    - default architecture     : arm [1]

Building the Boost C++ Libraries.

我的问题如下:如何使猎人建立适当的ABI提升?2谢谢!

i86rm4rw

i86rm4rw1#

我在Hunter上遇到过同样的问题。这很容易解决。创建(或添加到)文件cmake/Hunter/config.cmake以下行,以传递额外的cmake/ndk-toolchain参数来加快构建:

if(ANDROID)
hunter_config(
    Boost
    VERSION ${HUNTER_Boost_VERSION}
    CMAKE_ARGS
    CMAKE_ANDROID_ARCH_ABI=${ANDROID_ABI}
    ANDROID_ABI=${ANDROID_ABI}
    ANDROID_PLATFORM=${ANDROID_PLATFORM}
)
else()
hunter_config(
    Boost
    VERSION ${HUNTER_Boost_VERSION}
)
endif()

一般来说,你必须传递ANDROID_ABI和ANDROID_PLATFORM。Hunter运行新的cmake进程来构建boost,ndk toolchain被传递,abi & platform没有被传递。所以,toolchain不知道如何构建boost,默认构建它。结果,有很多链接错误。

相关问题