Как скомпилировать boost 1.68.0 для Android с помощью NDK r18b с помощью Windows - PullRequest
0 голосов
/ 24 января 2019

Мне пришлось создать версию boost для Android с использованием NDK r18b, мне было трудно добиться этого, поэтому я публикую здесь вопрос + ответ, так как это может помочь другим людям.

Во-первых, я попробовал https://github.com/moritz-wundke/Boost-for-Android, но это было безуспешно, см. Как собрать boost 1.69.0 для Android с NDK r18b с помощью moritz-wundke / Boost-for-Android? .

Во-вторых, я пытался https://github.com/dec1/Boost-for-Android, но это тоже не удалось, см. Как собрать boost 1.69.0 для Android с NDK r18b с помощью dec1 / Boost-for-Android? .

Какие шагиследовать, чтобы добиться компиляции наддува?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Спасибо за полезные инструкции.

moritz-wundke / Boost-for-Android - отличный проект и оригинальный Boost-for-Android. Однако, как он работает, он требует постоянного обслуживания, чтобы поддерживать каждую новую комбинацию ndk и boost, когда выходят новые версии (вы можете создавать только для тех явных версий, для которых настроен проект). После долгого времени (повышение версии 1.53 -> 1.63 и ndk 10-> 16), когда казалось, что проект больше не поддерживается, и мои попытки связаться с сопровождающим оказались тщетными, я решил его раскошелиться, что почему dec1 / Boost-for-Android появился.

Преимущество этого метода в том, что его, как правило, не нужно обновлять для поддержки новых версий ndk или повышения google. Как правило, они собираются из коробки или требуют редких настроек (но я все еще регулярно проверяю, чтобы убедиться).

Использование dec1 / Boost-for-Android возможно также проще (конечно, чем следовать вашим инструкциям выше). Вы можете построить для любой / всех архитектур (arm64-v8a, armeabi-v7a, x86, x86_64) за один раз в одной строке кода. А если вам не нужна пользовательская сборка, вы можете просто загрузить предварительно скомпилированные двоичные файлы (boost 1.69.0, с ndk 19 и 18b, теперь доступны и динамические, и статические) с здесь . Есть также пример приложения , чтобы помочь вам проверить вашу сборку.

Я совершенно уверен, что он может работать и на Windows или Mac (возможно, с меньшими усилиями, чем вы потратили выше), но гораздо проще просто использовать виртуальную машину (например, бесплатную виртуальную коробку) для сборки и скопируйте получившиеся двоичные файлы в Windows, если вы действительно хотите там развиваться.

Nonetheles, moritz-wundke / Boost-for-Android, похоже, получили новый приток вкладов в последнее время, что является хорошей новостью для всех. И если вы посчитаете его более подходящим для создания надстройки на Windows (или на любой другой платформе), то это замечательно.

Удачи в ваших проектах и ​​еще раз спасибо за идеи.

0 голосов
/ 24 января 2019

На самом деле, эти скрипты были разработаны для Linux, и они вряд ли работают под Windows. Затем я начал с нуля и наконец смог найти хороший конфиг под Windows для достижения этой цели. Я в основном проверил, как компилируются другие библиотеки (я использую QtCreator для развертывания на Android, поэтому окно компиляции сообщило мне, как должен вызываться clang ++, поэтому я пишу user-config.jam на основе этого.

Ниже приведены инструкции по компиляции boost 1.68.0 для Android armeabiv7 и x86 с использованием NDK r18b:

Затем установите некоторые переменные окружения:

set ANDROIDNDKROOT=C:\Android\android-ndk-r18b (change this accordingly)
set NDKVER=r18b
set CLANGPATH=%ANDROIDNDKROOT%\toolchains\llvm\prebuilt\windows-x86_64\bin

Скопируйте user-config.jam в папку повышения tools/build/src:

import os ;
local AndroidNDKRoot = [ os.environ ANDROIDNDKROOT ] ;
local AndroidBinariesPath = [ os.environ CLANGPATH ] ;

using clang : armeabiv7a
:
$(AndroidBinariesPath)/clang++
:
<compileflags>-fexceptions
<compileflags>-frtti
<compileflags>-mthumb
<compileflags>-ffunction-sections
<compileflags>-funwind-tables
<compileflags>-fstack-protector-strong
<compileflags>-Wno-invalid-command-line-argument
<compileflags>-Wno-unused-command-line-argument
<compileflags>-no-canonical-prefixes
<compileflags>-I$(AndroidNDKRoot)/sources/cxx-stl/llvm-libc++/include
<compileflags>-I$(AndroidNDKRoot)/sources/cxx-stl/llvm-libc++abi/include
<compileflags>-I$(AndroidNDKRoot)/sources/android/support/include
<compileflags>-DANDROID
<compileflags>-Wa,--noexecstack
<compileflags>-Wformat
<compileflags>-Werror=format-security
<compileflags>-DNDEBUG
<compileflags>-D_REENTRANT
<compileflags>-O2
<compileflags>-gcc-toolchain
<compileflags>$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
<compileflags>-target
<compileflags>armv7-linux-androideabi
<compileflags>-march=armv7-a
<compileflags>-mfloat-abi=softfp
<compileflags>-mfpu=vfp
<compileflags>-fno-builtin-memmove
<compileflags>-fpic
<compileflags>-DHAVE_CONFIG_H
<compileflags>-fno-integrated-as
<compileflags>--sysroot
<compileflags>$(AndroidNDKRoot)/sysroot
<compileflags>-isystem
<compileflags>$(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi
<compileflags>-D__ANDROID_API__=18
<archiver>$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/arm-linux-androideabi/bin/ar
<ranlib>$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/arm-linux-androideabi/bin/ranlib

;

# --------------------------------------------------------------------

using clang : x86
:
$(AndroidBinariesPath)/clang++
:
<compileflags>-fexceptions
<compileflags>-frtti
<compileflags>-mthumb
<compileflags>-ffunction-sections
<compileflags>-funwind-tables
<compileflags>-fstack-protector-strong
<compileflags>-Wno-invalid-command-line-argument
<compileflags>-Wno-unused-command-line-argument
<compileflags>-no-canonical-prefixes
<compileflags>-I$(AndroidNDKRoot)/sources/cxx-stl/llvm-libc++/include
<compileflags>-I$(AndroidNDKRoot)/sources/cxx-stl/llvm-libc++abi/include
<compileflags>-I$(AndroidNDKRoot)/sources/android/support/include
<compileflags>-DANDROID
<compileflags>-Wa,--noexecstack
<compileflags>-Wformat
<compileflags>-Werror=format-security
<compileflags>-DNDEBUG
<compileflags>-D_REENTRANT
<compileflags>-O2
<compileflags>-gcc-toolchain
<compileflags>$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/windows-x86_64
<compileflags>-target
<compileflags>i686-linux-android
<compileflags>-march=i686
<compileflags>-mfloat-abi=softfp
<compileflags>-mfpu=vfp
<compileflags>-fno-builtin-memmove
<compileflags>-fPIC
<compileflags>-mstackrealign
<compileflags>--sysroot
<compileflags>$(AndroidNDKRoot)/sysroot
<compileflags>-isystem
<compileflags>$(AndroidNDKRoot)/sysroot/usr/include/i686-linux-android
<compileflags>-D__ANDROID_API__=18
<archiver>$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/windows-x86_64/i686-linux-android/bin/ar
<ranlib>$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/windows-x86_64/i686-linux-android/bin/ranlib
;
  • Тогда для armeabiv7-a:

    • Пробег bjam -q --without-math --without-context --without-coroutine --without-fiber --without-python architecture=arm --ignore-site-config -j4 target-os=android toolset=clang-armeabiv7a link=static threading=multi --layout=tagged --build-dir=build/arm/%NDKVER% --stagedir=stage_arm_%NDKVER% stage
  • Тогда для x86:

    • Выполнить bjam -q --without-math --without-context --without-coroutine --without-fiber --without-python architecture=arm --ignore-site-config -j4 target-os=android toolset=clang-armeabiv7a link=static threading=multi --layout=tagged --build-dir=build/arm/%NDKVER% --stagedir=stage_arm_%NDKVER% stage

Надеюсь, те же шаги можно выполнить для компиляции 1.69.0 (не проверено)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...