簡體   English   中英

如何將 boost 構建為 Android 的共享庫

[英]How to build boost as shared libraries for Android

我使用NDK r21b成功為 Android armeabiv7a編譯了boost 1.70

我使用了 user-config.jam

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

using clang : armeabiv7a
:
$(AndroidBinariesPath)/clang++
:
<archiver>$(AndroidBinariesPath)/llvm-ar
<ranlib>$(AndroidBinariesPath)/llvm-ranlib
<compileflags>-fexceptions
<compileflags>-frtti
<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>-O2
<compileflags>$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64
<compileflags>-target
<compileflags>armv7a-linux-androideabi21
<compileflags>-march=armv7-a
<compileflags>-mfloat-abi=softfp
<compileflags>-mfpu=vfpv3-d16
<compileflags>-mthumb
<compileflags>-fPIC
<compileflags>-fno-integrated-as
<compileflags>--sysroot
<compileflags>$(AndroidNDKRoot)/sysroot
<compileflags>-isystem
<compileflags>$(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi
<compileflags>-D__ANDROID_API__=21
;

和命令行:

set ANDROIDNDKROOT=C:\Android\android_sdk\ndk-bundle
set NDKVER=r21b
set CLANGPATH=%ANDROIDNDKROOT%\toolchains\llvm\prebuilt\windows-x86_64\bin
set PATH=%PATH%;%CLANGPATH%
bjam -q link=static --without-math --without-context --without-coroutine --without-fiber --without-python --build-type=minimal architecture=arm --ignore-site-config -j8 target-os=android toolset=clang-armeabiv7a threading=multi --layout=tagged --build-dir=build_static_armeabiv7a/%NDKVER% --stagedir=stage_static_armeabiv7a_%NDKVER% stage

這完美地工作。

現在,我想將庫構建為共享,所以我運行:

bjam -q link=shared --without-math --without-context --without-coroutine --without-fiber --without-python --build-type=minimal architecture=arm --ignore-site-config -j8 target-os=android toolset=clang-armeabiv7a threading=multi --layout=tagged --build-dir=build_shared_armeabiv7a/%NDKVER% --stagedir=stage_shared_armeabiv7a_%NDKVER% stage

但后來我收到以下錯誤:

clang-linux.link.dll build_shared_armeabiv7a\r21b\boost\bin.v2\libs\atomic\build\clang-linux-armeabiv7a\release\target-os-android\threading-multi\visibility-hidden\libboost_atomic-mt-a32.so.1.70.0
clang++: error: unable to execute command: program not executable
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

    "C:\Android\android_sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin/clang++"   -o "build_shared_armeabiv7a\r21b\boost\bin.v2\libs\atomic\build\clang-linux-armeabiv7a\release\target-os-android\threading-multi\visibility-hidden\libboost_atomic-mt-a32.so.1.70.0" -Wl,-soname -Wl,libboost_atomic-mt-a32.so.1.70.0 -shared -Wl,--start-group "build_shared_armeabiv7a\r21b\boost\bin.v2\libs\atomic\build\clang-linux-armeabiv7a\release\target-os-android\threading-multi\visibility-hidden\lockpool.o"  -Wl,-Bstatic  -Wl,-Bdynamic  -Wl,--end-group -fPIC -fvisibility=hidden -fvisibility-inlines-hidden

...failed clang-linux.link.dll build_shared_armeabiv7a\r21b\boost\bin.v2\libs\atomic\build\clang-linux-armeabiv7a\release\target-os-android\threading-multi\visibility-hidden\libboost_atomic-mt-a32.so.1.70.0...

我嘗試使用 -v 手動執行失敗的命令以獲取更多詳細信息:

"C:\Android\android_sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin/clang++"   -o "build_shared_armeabiv7a\r21b\boost\bin.v2\libs\atomic\build\clang-linux-armeabiv7a\release\target-os-android\threading-multi\visibility-hidden\libboost_atomic-mt-a32.so.1.70.0" -Wl,-soname -Wl,libboost_atomic-mt-a32.so.1.70.0 -shared -Wl,--start-group "build_shared_armeabiv7a\r21b\boost\bin.v2\libs\atomic\build\clang-linux-armeabiv7a\release\target-os-android\threading-multi\visibility-hidden\lockpool.o" -Wl,-Bdynamic  -Wl,--end-group -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -v

報告的錯誤是:

"ld" -m i386pep --shared -Bdynamic -e DllMainCRTStartup --enable-auto-image-base -o "build_shared_armeabiv7a\\r21b\\boost\\bin.v2\\libs\\atomic\\build\\clang-linux-armeabiv7a\\release\\target-os-android\\threading-multi\\visibility-hidden\\libboost_atomic-mt-a32.so.1.70.0" dllcrt2.o crtbegin.o "-LC:\\Android\\r21a_Qt5_14\\android_sdk\\ndk-bundle\\toolchains\\llvm\\prebuilt\\windows-x86_64\\x86_64-w64-mingw32\\lib" "-LC:\\Android\\r21a_Qt5_14\\android_sdk\\ndk-bundle\\toolchains\\llvm\\prebuilt\\windows-x86_64\\lib" "-LC:\\Android\\r21a_Qt5_14\\android_sdk\\ndk-bundle\\toolchains\\llvm\\prebuilt\\windows-x86_64\\x86_64-w64-mingw32/sys-root/mingw/lib" -soname libboost_atomic-mt-a32.so.1.70.0 --start-group "build_shared_armeabiv7a\\r21b\\boost\\bin.v2\\libs\\atomic\\build\\clang-linux-armeabiv7a\\release\\target-os-android\\threading-multi\\visibility-hidden\\lockpool.o" -Bdynamic --end-group -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt crtend.o
clang++: error: unable to execute command: program not executable
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

看起來“ld”沒有找到,我想我應該告訴構建系統什么時候有“ld”,但我在C:\Android\android_sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin中找不到任何東西C:\Android\android_sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin以及如何在user-config.jam中指定“ld”路徑。

任何幫助,將不勝感激!

通過查看C:\Android\android_sdk\ndk-bundle\toolchains\llvm文件夾中存在“ld.exe”的位置,我在C:\Android\r21a_Qt5_14\android_sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\<some platform name>\bin所以我斷定目標平台可能丟失了。

我補充說:

<linkflags>-target
<linkflags>armv7a-linux-androideabi21

user-config.jam中,我可以將 boost 編譯為共享庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM