Genyleap/Docs
راهنمای پشتهٔ توسعه · Boost

Boost به‌عنوان بخشی از زیرساخت.

Boost در کنار کتابخانهٔ استاندارد C++، CMake و Qt یکی از اجزای اصلی پشتهٔ بومی Genyleap است. هرجا کتابخانهٔ استاندارد قابلیت موردنیاز را به‌خوبی فراهم می‌کند، همان را ترجیح دهید؛ اما برای شبکه، کانتینرها، محاسبات عددی، تجزیه، سازگاری و قابلیت حمل گسترده‌تر از Boost استفاده کنید.

Boost فعلی 1.92.0 منبع آرشیو رسمی انتشار ساخت Boost.Build / b2 Consume هدف‌های واردشدهٔ CMake

از Boost هدفمند استفاده کنید.

ابتدا کتابخانهٔ استاندارد

فقط به این دلیل که نسخه‌های قدیمی C++ قابلیتی مشابه نداشتند، وابستگی به Boost را حفظ نکنید.

وابستگی در سطح کتابخانه

فقط مؤلفه‌های Boost را به هر هدف متصل کنید که واقعاً به آن‌ها نیاز دارد؛ کل Boost را به یک وابستگی سراسری و ضمنی تبدیل نکنید.

کتابخانهٔ فقط-سرآیند هم یک وابستگی است

حتی اگر فایل باینری پیوند داده نشود، کتابخانه‌های فقط-سرآیند روی زمان کامپایل، هشدارها، نیازمندی‌های قابلیت‌ها و وابستگی‌های غیرمستقیم اثر می‌گذارند.

کتابخانه‌های کامپایل‌شده وابسته به معماری‌اند

برای هر سیستم‌عامل، ABI، معماری، خانوادهٔ کامپایلر و گونهٔ باینری، مسیر نصب جداگانه نگه دارید.

آخرین نسخهٔ پایدار کد منبع را دریافت کنید.

نسخه از صفحهٔ رسمی آخرین انتشار Boost شناسایی می‌شود و به‌صورت ثابت داخل راهنما نوشته نمی‌شود.

Shellدریافت و استخراج
mkdir -p "$HOME/Boost/Src"
cd "$HOME/Boost/Src"

curl -fLO "https://archives.boost.io/release/1.92.0/source/boost_1_92_0.tar.bz2"
tar -xf "boost_1_92_0.tar.bz2"

export BOOST_SRC="$HOME/Boost/Src/boost_1_92_0"

کتابخانه‌های کامپایل‌شوندهٔ Boost را بسازید؛ موارد فقط-سرآیند را بی‌دلیل دوباره کامپایل نکنید.

بسیاری از کتابخانه‌های Boost فقط از فایل‌های سرآیند تشکیل شده‌اند. کتابخانه‌هایی که باینری تولید می‌کنند باید برای هر پلتفرم و ABI جداگانه ساخته و در مسیر نصب مشخص قرار داده شوند. پروژه‌های Genyleap سپس هم مؤلفه‌های فقط-سرآیند و هم مؤلفه‌های کامپایل‌شده را از طریق هدف‌های CMake مصرف می‌کنند.

POSIX shellراه‌اندازی اولیهٔ Boost.Build
cd "$BOOST_SRC"
./bootstrap.sh

./b2 --version
Windowsراه‌اندازی اولیهٔ Boost.Build
cd C:\Boost\Src\boost_1_92_0bootstrap.bat

b2.exe --version
کد منبع، خروجی‌های ساخت و مسیرهای نصب را از هم جدا نگه دارید.

یک درخت کد منبع Boost می‌تواند مشترک باشد، اما خروجی‌های کامپایل‌شده از کامپایلرها یا معماری‌های متفاوت هرگز نباید داخل یک مسیر نصب با هم مخلوط شوند.

macOS.

برای باینری‌هایی که با Apple SDK یکپارچه می‌شوند از Apple Clang استفاده کنید. روی Apple Silicon، نصب‌های Boost برای arm64 و x86_64 را جدا نگه دارید؛ یک برنامهٔ یونیورسال می‌تواند وابستگی‌های هر معماری را در مرحلهٔ بسته‌بندی برنامه ترکیب کند.

arm64

ShellApple Silicon
cd "$BOOST_SRC"

./b2   toolset=clang   architecture=arm   address-model=64   variant=release   threading=multi   link=static,shared   cxxflags="-arch arm64"   linkflags="-arch arm64"   --prefix="$HOME/Boost/1.92.0/macos-arm64"   install

x86_64

ShellmacOS روی Intel
cd "$BOOST_SRC"

./b2   toolset=clang   architecture=x86   address-model=64   variant=release   threading=multi   link=static,shared   cxxflags="-arch x86_64"   linkflags="-arch x86_64"   --prefix="$HOME/Boost/1.92.0/macos-x86_64"   install
Shellبررسی معماری
file "$HOME/Boost/1.92.0/macos-arm64/lib/"*
file "$HOME/Boost/1.92.0/macos-x86_64/lib/"*

معماری‌های Linux.

معماریزنجیره‌ابزارمدل ساخت
x86_64GCC or Clangبومی
arm64 / aarch64GCC or Clangبومی یا کامپایل متقابل
armv7 / armhfarm-linux-gnueabihfمعمولاً کامپایل متقابل
riscv64Target-specific GCC/ClangLinux سفارشی با کامپایل متقابل

ساخت بومی x86_64

ShellGCC
cd "$BOOST_SRC"

./b2   toolset=gcc   architecture=x86   address-model=64   variant=release   threading=multi   link=static,shared   --prefix="$HOME/Boost/1.92.0/linux-x86_64"   install

ساخت بومی arm64 / aarch64

ShellGCC
cd "$BOOST_SRC"

./b2   toolset=gcc   architecture=arm   address-model=64   variant=release   threading=multi   link=static,shared   --prefix="$HOME/Boost/1.92.0/linux-arm64"   install

ARMv7 با کامپایل متقابل

برای Linux نهفته، کامپایلر متقابل را در پیکربندی اختصاصی Boost.Build تعریف کنید و sysroot و زنجیره‌ابزار هدف را دقیقاً با تصویر سیستم دستگاه هماهنگ نگه دارید.

Boost.Builduser-config-armv7.jam
using gcc : armv7 : arm-linux-gnueabihf-g++ ;
ShellARMv7 با ممیز شناور سخت‌افزاری
cd "$BOOST_SRC"

./b2   --user-config="$HOME/Boost/Toolchains/user-config-armv7.jam"   toolset=gcc-armv7   target-os=linux   architecture=arm   address-model=32   abi=aapcs   binary-format=elf   variant=release   threading=multi   link=static   --prefix="$HOME/Boost/1.92.0/linux-armv7"   install

Windows.

Boost.Build را داخل محیط توسعهٔ مناسب Visual Studio اجرا کنید. خروجی‌های x64 و ARM64 را جدا نگه دارید، همان‌طور که درخت‌های ساخت MSVC و clang-cl را جدا نگه می‌دارید.

x64 · MSVC

Developer PowerShellx64
cd C:\Boost\Src\boost_1_92_0
b2.exe ^
  toolset=msvc ^
  architecture=x86 ^
  address-model=64 ^
  variant=release ^
  threading=multi ^
  link=static,shared ^
  --prefix=C:\Boost\1.92.0\windows-x64 ^
  install

ARM64 · MSVC

ARM64 Developer PowerShellARM64
cd C:\Boost\Src\boost_1_92_0
b2.exe ^
  toolset=msvc ^
  architecture=arm ^
  address-model=64 ^
  variant=release ^
  threading=multi ^
  link=static,shared ^
  --prefix=C:\Boost\1.92.0\windows-arm64 ^
  install

ABIهای Android.

مؤلفه‌های فقط-سرآیند Boost فقط به فایل‌های سرآیند نیاز دارند. کتابخانه‌های Boost که جداگانه کامپایل می‌شوند باید برای هر ABI اندروید با همان NDK مورد استفادهٔ برنامهٔ بومی، جداگانه کامپایل متقابل شوند.

ABIپیشوند کامپایلر NDKمعماری Boost
arm64-v8aaarch64-linux-android28-clang++arm / 64
armeabi-v7aarmv7a-linux-androideabi28-clang++arm / 32
x86_64x86_64-linux-android28-clang++x86 / 64
x86i686-linux-android28-clang++x86 / 32
Shellشناسایی زنجیره‌ابزار LLVM در NDK
export ANDROID_NDK_ROOT="$HOME/Library/Android/sdk/ndk/27.2.12479018"
export NDK_LLVM="$(find "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt"   -mindepth 1 -maxdepth 1 -type d | head -1)"

echo "$NDK_LLVM"

arm64-v8a

Boost.Buildandroid-arm64.jam
using clang : android-arm64 :
    $NDK_LLVM/bin/aarch64-linux-android28-clang++ ;
Shellساخت
./b2   --user-config=android-arm64.jam   toolset=clang-android-arm64   target-os=android   architecture=arm   address-model=64   abi=aapcs   binary-format=elf   link=static   variant=release   --prefix="$HOME/Boost/1.92.0/android-arm64-v8a"   install

armeabi-v7a

Boost.Buildandroid-armv7.jam
using clang : android-armv7 :
    $NDK_LLVM/bin/armv7a-linux-androideabi28-clang++ ;
Shellساخت
./b2   --user-config=android-armv7.jam   toolset=clang-android-armv7   target-os=android   architecture=arm   address-model=32   abi=aapcs   binary-format=elf   link=static   variant=release   --prefix="$HOME/Boost/1.92.0/android-armeabi-v7a"   install

x86_64

Boost.Buildandroid-x86_64.jam
using clang : android-x86_64 :
    $NDK_LLVM/bin/x86_64-linux-android28-clang++ ;
Shellساخت
./b2   --user-config=android-x86_64.jam   toolset=clang-android-x86_64   target-os=android   architecture=x86   address-model=64   binary-format=elf   link=static   variant=release   --prefix="$HOME/Boost/1.92.0/android-x86_64"   install

دستگاه iOS و شبیه‌ساز.

فایل‌های سرآیند Boost می‌توانند مشترک باشند، اما کتابخانه‌های کامپایل‌شدهٔ Boost باید دقیقاً با Apple SDK و معماری مورد استفادهٔ برنامه منطبق باشند. در خط مبنای فعلی Qt در Genyleap، کتابخانه‌های دستگاه از arm64 استفاده می‌کنند و کتابخانه‌های شبیه‌ساز از x86_64استفاده می‌کنند؛ بنابراین مسیر نصب باینری این دو را جدا نگه دارید.

Shellشناسایی Apple SDKها
export IOS_DEVICE_SDK="$(xcrun --sdk iphoneos --show-sdk-path)"
export IOS_SIMULATOR_SDK="$(xcrun --sdk iphonesimulator --show-sdk-path)"

xcrun --sdk iphoneos --find clang++
xcrun --sdk iphonesimulator --find clang++
echo "$IOS_DEVICE_SDK"
echo "$IOS_SIMULATOR_SDK"

iOS device · arm64

Shellکتابخانه‌های ایستای Boost برای iphoneos
cd "$BOOST_SRC"

./b2 \
  toolset=clang \
  target-os=iphone \
  architecture=arm \
  address-model=64 \
  abi=aapcs \
  binary-format=mach-o \
  threading=multi \
  link=static \
  variant=release \
  cxxflags="-arch arm64 -isysroot $IOS_DEVICE_SDK -miphoneos-version-min=18" \
  linkflags="-arch arm64 -isysroot $IOS_DEVICE_SDK -miphoneos-version-min=18" \
  --prefix="$HOME/Boost/1.92.0/ios-device" \
  install

iOS Simulator · x86_64

Shellکتابخانه‌های ایستای Boost برای iphoneشبیه‌ساز
cd "$BOOST_SRC"

./b2 \
  toolset=clang \
  target-os=iphone \
  architecture=x86 \
  address-model=64 \
  binary-format=mach-o \
  threading=multi \
  link=static \
  variant=release \
  cxxflags="-arch x86_64 -isysroot $IOS_SIMULATOR_SDK -mios-simulator-version-min=18" \
  linkflags="-arch x86_64 -isysroot $IOS_SIMULATOR_SDK -mios-simulator-version-min=18" \
  --prefix="$HOME/Boost/1.92.0/ios-simulator" \
  install
معماری Boost را با شبیه‌ساز Qt یکسان نگه دارید.

کتابخانه‌های فعلی Qt برای شبیه‌ساز iOS با معماری x86_64هستند. روی Apple Silicon، کتابخانه‌های کامپایل‌شدهٔ Boost برای شبیه‌ساز را نیز با معماری x86_64 بسازید تا بتوانند با همان برنامهٔ Qt پیوند بخورند؛ سپس مقصد شبیه‌ساز را زیر Rosetta اجرا کنید.

بسته‌بندی اختیاری با XCFramework

اگر یک بستهٔ Apple می‌خواهید که هم خروجی دستگاه و هم شبیه‌ساز را داشته باشد، برای هر کتابخانهٔ کامپایل‌شدهٔ Boost یک XCFramework جدا بسازید. مؤلفه‌های فقط-سرآیند Boost به XCFramework نیاز ندارند.

Shellنمونه: Boost.Filesystem
mkdir -p "$HOME/Boost/1.92.0/xcframeworks"

xcodebuild -create-xcframework \
  -library "$HOME/Boost/1.92.0/ios-device/lib/libboost_filesystem.a" \
  -headers "$HOME/Boost/1.92.0/ios-device/include" \
  -library "$HOME/Boost/1.92.0/ios-simulator/lib/libboost_filesystem.a" \
  -headers "$HOME/Boost/1.92.0/ios-simulator/include" \
  -output "$HOME/Boost/1.92.0/xcframeworks/BoostFilesystem.xcframework"
Shellبررسی معماری‌های داخل بسته
lipo -info "$HOME/Boost/1.92.0/ios-device/lib/libboost_filesystem.a"
lipo -info "$HOME/Boost/1.92.0/ios-simulator/lib/libboost_filesystem.a"

For current Genyleap builds, use Xcode 16 or newer whenever the surrounding Qt/Apple toolchain requires it.

Boost را با هدف‌های مدرن CMake مصرف کنید.

پوشه‌های include را به‌صورت سراسری اضافه نکنید و نام فایل‌های کتابخانه را دستی به هم نچسبانید. CMake را به مسیر Boost مخصوص همان معماری متصل کنید و هدف‌های واردشدهٔ Boost را فقط به هدفی پیوند دهید که واقعاً مالک آن وابستگی است.

CMakeمؤلفه‌های کامپایل‌شده و فقط-سرآیند
find_package(Boost 1.92.0 CONFIG REQUIRED
    COMPONENTS
        asio
        filesystem
        json
        program_options
)

target_link_libraries(genyleap_core
    PRIVATE
        Boost::asio
        Boost::filesystem
        Boost::json
        Boost::program_options
)
Shellانتخاب مسیر نصب مخصوص یک معماری
cmake -S . -B build/dev -G Ninja   -DCMAKE_PREFIX_PATH="$HOME/Boost/1.92.0/macos-arm64"

cmake --build build/dev --parallel
Boost 1.92.0 has modern CMake component support.

پیکربندی فعلی بستهٔ CMake در Boost می‌تواند کتابخانه‌های فقط-سرآیند را نیز به‌صورت مؤلفه‌های نام‌دار ارائه کند. هدف‌های واردشده‌ای مانند Boost::asio یا Boost::mp11 را به تنظیمات سراسری include و پیونددهی در کل پوشه ترجیح دهید.

مرز واقعی کتابخانه را بررسی کنید، نه فقط موفق بودن دستور نصب را.

Shellبررسی نصب
find "$HOME/Boost/1.92.0/macos-arm64" -maxdepth 2 -type f | head
file "$HOME/Boost/1.92.0/macos-arm64/lib/"*

سپس یک هدف واقعی و کوچک را از طریق find_package(Boost CONFIG ...)پیکربندی و کامپایل کنید. این کار بستهٔ CMake نصب‌شده، مسیرهای include، معماری باینری و نمودار وابستگی‌های غیرمستقیم را یکجا بررسی می‌کند.

مراجع بالادستی فعلی.