我的烦恼有以下几点。
boost与hunter集成到我的CMake中:
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构建我的项目:
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构建在以下配置之上:
[ 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。正如我所看到的,它显示了与arm 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建立助推?谢谢!
发布于 2022-09-22 01:13:43
我和亨特也遇到过同样的问题。这很容易解决。创建(或添加到)文件cmake/Hunter/config.cmake以下行,以传递额外的cmake/ndk工具链参数以增强构建:
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并在默认情况下构建它。因此,存在许多链接错误。
https://stackoverflow.com/questions/72647771
复制相似问题