首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用hunter为android构建boost

用hunter为android构建boost
EN

Stack Overflow用户
提问于 2022-06-16 14:49:53
回答 1查看 83关注 0票数 1

我的烦恼有以下几点。

boost与hunter集成到我的CMake中:

代码语言:javascript
复制
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上为android构建我的项目:

代码语言:javascript
复制
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-v7a,一切正常。正如我所看到的,boost构建在以下配置之上:

代码语言:javascript
复制
[ 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,我有一个错误:

代码语言:javascript
复制
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。正如我所看到的,它显示了与arm ABI相同的配置:

代码语言:javascript
复制
[ 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建立助推?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 01:13:43

我和亨特也遇到过同样的问题。这很容易解决。创建(或添加到)文件cmake/Hunter/config.cmake以下行,以传递额外的cmake/ndk工具链参数以增强构建:

代码语言:javascript
复制
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。亨特运行新的cmake过程来构建boost,ndk工具链被通过,abi和platform没有。因此,工具链不知道如何构建boost并在默认情况下构建它。因此,存在许多链接错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72647771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档