我的烦恼如下。
我的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谢谢!
1条答案
按热度按时间i86rm4rw1#
我在Hunter上遇到过同样的问题。这很容易解决。创建(或添加到)文件cmake/Hunter/config.cmake以下行,以传递额外的cmake/ndk-toolchain参数来加快构建:
一般来说,你必须传递ANDROID_ABI和ANDROID_PLATFORM。Hunter运行新的cmake进程来构建boost,ndk toolchain被传递,abi & platform没有被传递。所以,toolchain不知道如何构建boost,默认构建它。结果,有很多链接错误。