akashc
September 8, 2025, 3:07pm
1
When exporting my Unity project to Xcode and building for iOS, I encounter linker errors related to undefined Blend2D symbols such as:
_blContextBegin
_blContextDestroy
_blContextEnd
_blContextInit
_blImageCreateFromData
_blImageDestroy
_blImageInit
I checked my Assets/Plugins/iOS and the exported Xcode project, but I do not see any libblend2d.a or Blend2D framework included. Because of this, the iOS build fails.
Could you clarify:
Should libblend2d.a be bundled with Cesium for Unity? If not, what is the correct way to include Blend2D for iOS builds?
Do I need to manually build Cesium Native / Blend2D from source and add it to Unity? (Current Cesium for Unity version : 1.17.0 )
janine
September 10, 2025, 2:22pm
2
Hi @akashc ,
Thank you for this report. This is a known issue that has been recorded on Github here:
opened 06:00AM - 20 Aug 25 UTC
bug
urgent
環境
- Unity バージョン: 6000.0.34f1
- Cesium for Unity バージョン: 1.17.0
- ターゲット: iOS (arm… 64)
- Xcode バージョン: 16.4
- macOS: 15.7
再現手順
1. Unity から iOS ビルドを出力する(`Build System` = Xcode)
2. 出力された `Unity-iPhone.xcworkspace` を開き、ビルドするとリンクエラーが発生する
発生しているエラー(抜粋)
```
Undefined symbols for architecture arm64:
"_blContextBegin", referenced from:
CesiumVectorData::VectorRasterizer::VectorRasterizer(CesiumGeospatial::GlobeRectangle const&, CesiumUtility::IntrusivePointer<CesiumGltf::ImageAsset>&, unsigned int, CesiumGeospatial::Ellipsoid const&) in libCesiumVectorData.a[5](VectorRasterizer.o)
"_blContextDestroy", referenced from:
CesiumRasterOverlays::RasterizedPolygonsTileProvider::loadTileImage(CesiumRasterOverlays::RasterOverlayTile&)::'lambda'()::operator()() const in libCesiumRasterOverlays.a[13](RasterizedPolygonsOverlay.o)
CesiumVectorData::VectorRasterizer::~VectorRasterizer() in libCesiumRasterOverlays.a[13](RasterizedPolygonsOverlay.o)
"_blContextEnd", referenced from:
CesiumVectorData::VectorRasterizer::finalize() in libCesiumVectorData.a[5](VectorRasterizer.o)
"_blContextInit", referenced from:
CesiumVectorData::VectorRasterizer::VectorRasterizer(CesiumGeospatial::GlobeRectangle const&, CesiumUtility::IntrusivePointer<CesiumGltf::ImageAsset>&, unsigned int, CesiumGeospatial::Ellipsoid const&) in libCesiumVectorData.a[5](VectorRasterizer.o)
"_blImageCreateFromData", referenced from:
CesiumVectorData::VectorRasterizer::VectorRasterizer(CesiumGeospatial::GlobeRectangle const&, CesiumUtility::IntrusivePointer<CesiumGltf::ImageAsset>&, unsigned int, CesiumGeospatial::Ellipsoid const&) in libCesiumVectorData.a[5](VectorRasterizer.o)
"_blImageDestroy", referenced from:
CesiumRasterOverlays::RasterizedPolygonsTileProvider::loadTileImage(CesiumRasterOverlays::RasterOverlayTile&)::'lambda'()::operator()() const in libCesiumRasterOverlays.a[13](RasterizedPolygonsOverlay.o)
CesiumVectorData::VectorRasterizer::~VectorRasterizer() in libCesiumRasterOverlays.a[13](RasterizedPolygonsOverlay.o)
"_blImageInit", referenced from:
CesiumVectorData::VectorRasterizer::VectorRasterizer(CesiumGeospatial::GlobeRectangle const&, CesiumUtility::IntrusivePointer<CesiumGltf::ImageAsset>&, unsigned int, CesiumGeospatial::Ellipsoid const&) in libCesiumVectorData.a[5](VectorRasterizer.o)
ld: symbol(s) not found for architecture arm64
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
```
確認したこと
- 出力フォルダ内の lib を確認したところ、`libblend2d.a` と `libasmjit.a` が含まれていませんでした(これらが無いと `_blContext*` および `_blImage*` シンボルが未定義になります)。
- 該当シンボルは Cesium のベクタ/ポリゴンラスタライズ処理(VectorRasterizer / RasterizedPolygonsOverlay)が Blend2D の C API を呼んでいる箇所から参照されています。
期待動作
- Cesium の iOS 出力に `libblend2d.a` と `libasmjit.a`(arm64対応の静的ライブラリ)が同梱されており、Xcodeビルド時にリンクエラーが出ないこと。
We recognize this is breaking behavior, and I apologize on the behalf of the team for the inconvenience. We are investigating and determining a fix so we can get this into the next release.
Hi @akashc ,
I’ve just opened a pull request with a fix for this:
main ← blend2d-ios
opened 10:38AM - 11 Sep 25 UTC
Fixes CesiumGS/cesium-unity#598
`libblend2d.a` was not being installed for iO… S because it (alone) uses a vcpkg `[feature]` specification (specifically: `blend2d[core]`) to turn off asmjit, which is enabled by default. This triggered a bug in the part of our CMakeLists.txt that is meant to find the .lib associated with the vcpkg dependencies and install them.
The fix implemented here is to remove the `[feature]` from the package name using a regular expression.
We were previously _trying_ to do this, but it didn't work because:
- It was only implemented for public dependencies, and blend2d is a private dependency.
- The backslashes were not properly escaped, so the regex didn't find the feature spec it was looking for.
So it should be fixed in our next release. In the meantime, you can try out a pre-release build from this branch:
You can easily install it by going here and downloading the “Combined Package” artifact:
Then extract the .tar.gz file found inside it, and add it to your project using the Unity package manager.
Let me know if that solves the problem for you!
akashc
September 17, 2025, 10:44am
4
Yes I tried downloading the .tgz file from git, it installed successfully and i was able to build for iOS without any trouble.
Thanks for the update.
1 Like
@Kevin_Ring , I’m also facing same issue when building iOS build from unreal engine
Hi @Kevin_Ring , Any update on the following issue for unreal engine?
Happy to hear it is solvable. Waiting for the update.
@Mayank_i are you still experiencing this problem in Cesium for Unreal v2.20.0, which was released at the beginning of October?
Thanks @Kevin_Ring , for the update. Latest update of the plugin surely removed these errors while building for iOS through unreal engine.
1 Like