Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
R&D 祭 2024 今だ!ABI問題
Search
OLM Digital R&D
PRO
May 17, 2026
Technology
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
R&D 祭 2024 今だ!ABI問題
OLM Digital R&D
PRO
May 17, 2026
More Decks by OLM Digital R&D
See All by OLM Digital R&D
R&D 祭 2024 SIGGRAPH ASIAで会いましょう&クロージング
olmdrd
PRO
0
120
R&D 祭 2024 OLM Open Tools:アニメ業界を幸せに
olmdrd
PRO
0
250
R&D 祭 2024 UE5で絵コンテ・作画の制作支援ツールをつくる話
olmdrd
PRO
0
390
R&D 祭 2024 アニメエフェクト作成の効率化
olmdrd
PRO
0
180
R&D 祭 2024 社内ITインフラを紹介 2024
olmdrd
PRO
0
200
R&D 祭 2024 GitHub Enterprise 導入とActionsの活用
olmdrd
PRO
0
94
R&D 祭 2024 パイプラインツール紹介+Adobe CEP開発
olmdrd
PRO
0
170
R&D 祭 2024 脱XGen:OLM Hair and Feather
olmdrd
PRO
0
130
R&D 祭 2024 オープニング 祭の見どころ紹介とSAKUGADOも
olmdrd
PRO
0
110
Other Decks in Technology
See All in Technology
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
620
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
13
7.4k
AIエージェント時代のPlatform as a Product —— テックリードがPdMとして回す発見・導入・計測 / Platform as a Product in the AI Agent Era
toshi0607
0
180
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
6
760
ほんとうの信頼性はヒーローが死んでからはじまる / True reliability begins after the hero dies
vtryo
0
120
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1.6k
特殊変数大全
dak2
0
130
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.5k
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
480
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
160
Amazon Bedrock Agents ClassicからAmazon Bedrock AgentCoreへ移行した際、ガードレール設定が2箇所に割れた話
matsunobu
0
110
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The browser strikes back
jonoalderson
0
1.7k
Un-Boring Meetings
codingconduct
0
430
How GitHub (no longer) Works
holman
316
150k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
420
The Spectacular Lies of Maps
axbom
PRO
1
1k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
550
Making Projects Easy
brettharned
120
6.8k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Transcript
今だ!ABI問題! Marc Salvati © OLM Digital, Inc. 1
前回:Maniacコード コード 企画 ビルド テスト リリース デプロイ 管理 監視 DEV
開発 OPS 運用 要望とアイデア の管理 ソースコードの バージョン管理 自動コンパイル 開発環境の自動構築 自動インストール 結合テスト バージョン番号 の決め方 2 © OLM Digital, Inc.
今回の内容 コード 企画 ビルド テスト リリース デプロイ 管理 監視 DEV
開発 OPS 運用 ABI問題 3 © OLM Digital, Inc.
概要 • VFX Reference Platform • ダイナミックライブラリ • ABIについて •
CMakeでABI問題の対応 • まとめ 4 © OLM Digital, Inc.
VFX Reference Platform • 映像業界の様々なバージョンの統一 – DCCの使用するコンパイラ – DCCの使用するライブラリ –
Diamond(菱形)依存関係を防ぐ • 映像会社とソフト会社の協力 – Linuxの対応のハードルを下げる – 一緒に決める 5 © OLM Digital, Inc.
VFX Reference Platform • 2023年からNew libstdc++ ABIに切り替え推進 • DCCが2024年で切り替え –
Maya 2024、Nuke 15 • 必要な対応 – New libstdc++ に切り替え – ABI二つの対応 • libstdc++ • New libstdc++ • Maya 2023まだ使っているから 6 © OLM Digital, Inc.
• ランタイム – スタンダード – libstdc++, vc… • 外部ライブラリ –
OpenCV – Boost – … • 二種類 – スタティック – ダイナミック 実行ができる ライブラリについて コード ダイナミック ライブラリ バイナリ コンパイル されたコード 実行できる プログラム リンク ライブラリ のヘッダー … コンパイル ダイナミック ライブラリ バイナリ 7 ライブラリ バイナリ © OLM Digital, Inc.
ダイナミックライブラリについて • いいところ – 更新が可能 • 後方互換性が必要 • バグを見つけたら修正されたバイナリ配布 ‐
セキュリティ問題 – プラグインの仕組みが可能 • Maya、AEなどのプラグインはダイナミックライブラリ • 悪いところ – 勝手に更新されてクラッシュの原因になる • OSのライブラリ更新時 • ソフトのインストール時 – ABI問題が置きやすい 8 © OLM Digital, Inc.
ABIってなに? アプリケーションバイナリインタフェース(ABI, 英: Application Binary Interface)とは、 アプリケーション(ユーザ)プログラムとシステム(オペレーティングシステムやライブラリ) との間の、バイナリレベルのインタフェースである。 また、アプリケーション相互間や、それらの部品(プラグイン等)との バイナリインタフェースもある。
Wikipediaより 9 © OLM Digital, Inc.
ABIってなに? 10 © OLM Digital, Inc. • バイナリフォーマット – C++の関数名
– 型名、レイアウト – 関数の呼び方 – パラメータの使い方 – など – 参考:What is ABI, and What Should WG21 Do About It? • OS依存 – WindowsでコンパイルされたものをLinuxで使えない • コンパイラ依存 – MinGWとVC++でコンパイルされたものを一緒に使えない • インターフェースなので互換性が大事!
• コンパイルされたライブラリで実行可能 ABIの互換性 ダイナミックライブラリV2 実行ができる プログラム 使用 コードのバイナリ 実行ができる プログラム
リンク コンパイル ライブラリ バイナリ V2 ライブラリ ヘッダー V2 プログラム ライブラリ ヘッダー V2 ライブラリ バイナリ V2 ライブラリ バイナリ V2 © OLM Digital, Inc. 11
• 後方互換性 – 古いライブラリでコンパイルされたものが新しいバージョンで実行可能 ABIの互換性 ダイナミックライブラリV2 後方互換性があ れば実行できる プログラム 使用
コードのバイナリ 実行ができる プログラム リンク コンパイル ライブラリ バイナリ V2 ライブラリ ヘッダー V2 プログラム ライブラリ ヘッダー V2 ライブラリ バイナリ V2 ライブラリ バイナリ V3 © OLM Digital, Inc. 12
• 前方互換性 – 新しいライブラリでコンパイルされたものが古いバージョンで実行可能 ABIの互換性 ダイナミックライブラリV2 前方互換性があ れば実行できる プログラム 使用
コードのバイナリ 実行ができる プログラム リンク コンパイル ライブラリ バイナリ V2 ライブラリ ヘッダー V2 プログラム ライブラリ ヘッダー V2 ライブラリ バイナリ V2 ライブラリ バイナリ V0 © OLM Digital, Inc. 13
APIの互換性の問題発生 • APIの互換性がない → ABIの互換性がない header.h #include “header.h” int main() { void
fly(10.0f); return 0; } 14 © OLM Digital, Inc. mylib Version 1ライブラリ void fly(float speed); mylib Version 2ライブラリ void fly(float speed, float altitude); myprogram.c 実行環境 Version 1でコンパイル myprogram.exe myprogam Version 2ライブラリ mylib.dll mylib.so
• C/C++ では一つの定義のルール(One Definition Rule) • 同じ名前なのに定義が違うものだと>> Undefined behavior 実行環境
Version 1でコンパイル myprogram.exe myprogam ABIの互換性の問題発生 Version 2ライブラリ mylib.dll mylib.so mylib Version 1ライブラリ struct MyStruct{ int a; int b; }; mylib Version 2ライブラリ struct MyStruct{ int a; int b; Int c; }; 15 © OLM Digital, Inc. header.h #include “header.h” int main() { MyStruct s; s.a = 1; s.b = 2; return 0; } myprogram.c
• 互換性を簡単になくせる – データのレイアウトの変更 – クラスの構造の変更 – virtualの追加 – …
• 参考 – KDE、Oracle、WG21 ABIの互換性の問題発生 16 © OLM Digital, Inc.
映像制作でのABI問題 • DCCプラグインとDCCのライブラリのABI互換性が必須! • ランタイム – 前方互換性がない – VC++のランタイム •
2015年移行互換性あり? – libstdc++ • GCC5.1、2015年で後方互換性を壊した • 2015年でDeprecatedの導入、APIの互換性を壊す? • SDK – 前方互換性がない – 後方互換性はバージョン次第 • 殆どあり: ArnoldとAE • 殆どなし: Mayaと Nuke 17 © OLM Digital, Inc. VC++2017でのエラー Error C2338… Before VS 2017 15.8, the member type would non-conformingly have an alignment of only alignof(max_align_t). VS 2017 15.8 was fixed to handle this correctly, but the fix inherently changes layout and breaks binary compatibility…
ABI問題の対応 • プラグインのコンパイル – DCCの推薦するコンパイラを使う – バージョン毎にコンパイル • SDKバージョンxコンパイラ バージョン
• MtoAにロードされるので、Arnoldも! • 外部ライブラリ – 再帰的に全ての依存ライブラリ – ソースからコンパイル • プラグインと同じコンパイラ – Linuxでは二つのバージョンをコンパイル • _GLIBCXX_USE_CXX11_ABI=1 • _GLIBCXX_USE_CXX11_ABI=0 • ビルド時相応しいバージョンとリンク 18 © OLM Digital, Inc.
ランタイムのバージョンでさらにややこしい • LinuxではDistroのlibstdc++が固定 – 更新可能ですが・・・ – devtoolsetでごまかしてたり • 新しいABIをStaticリンクで •
注意:DTS 6-7 が_GLIBCXX_USE_CXX11_ABIを無視 • Windowsのバージョンわかりにくい – 2017からDLLの名前が変わらない – Propertiesで確認・・・ 19 libstdc++.so.6.0.25 libstdc++.so.6.0.28 © OLM Digital, Inc.
ABI問題の対応 • プラグインのコンパイル – DCCの推奨コンパイラを使う – バージョン毎にコンパイル • SDKバージョンxコンパイラ バージョン
• MtoAにロードされるので、Arnoldも! • 外部ライブラリ – 再帰的に全ての依存ライブラリ – ソースからコンパイル • プラグインと同じコンパイラ – Linuxでは二つのバージョンをコンパイル • _GLIBCXX_USE_CXX11_ABI=1 • _GLIBCXX_USE_CXX11_ABI=0 • ビルド時相応しいバージョンとリンク 20 コンパイラ指定問題 ABI指定問題 →CMakeで解決 © OLM Digital, Inc.
• モダンCMakeデファクトスタンダード なぜCMake? コード 内部ライブラリ 外部ライブラリ 内部ライブラ リのバイナリ 外部ライブラ リのバイナリ
コンパイルさ れたコード 実行ができる コード コンパイル リンク … add_executable(application1) target_sources(application1 PRIVATE src.cpp src.h) target_compile_features(application1 PRIVATE cxx_std_14) find_package(library1) target_link_libraries(application1 PRIVATE library1) 21 © OLM Digital, Inc.
• DCCの対応はさまざま – モダンCMake対応 • Nuke • Houdini – CMake対応
• Maya ‐ モダンではない • ターゲットの定義がない • 配布されているQtのCMakeの使用が難しい – CMake非対応 • Arnold, After Effects, Photoshop • 外部ライブラリ大体モダンCMake対応 – OpenCV, Qhull, Eigen… 映像制作においてのモダンCMake対応 22 © OLM Digital, Inc.
コンパイラを指定する • WindowsはコマンドラインのGeneratorで回避 – Visual C++しか使われていない – ex: -GVisual Studio
15 2017 Win64 • Linux – GCCしか使われていない – GeneratorではGCCのバージョンの指定不可能 – CMAKE_C_COMPILER、CMAKE_CXX_COMPILERだけでは不十分 – PATHの最初に追加する – sclを推奨 23 © OLM Digital, Inc.
ABI指定 • _GLIBCXX_USE_CXX11_ABIの切り替え • ソースのコンパイルのABI指定 – コマンドのフラグ • New ABI:
-D CMAKE_CXX_FLAGS='-D_GLIBCXX_USE_CXX11_ABI=1' • Legacy ABI: -D CMAKE_CXX_FLAGS='-D_GLIBCXX_USE_CXX11_ABI=0' – ソースからのライブラリもこれで • ライブラリのABIバージョン – find_packageにはABI系のパラメータがない 24 © OLM Digital, Inc.
• 依存の必要なフラグ、ヘッダーなど推移的に • ライブラリからプログラムへ B が必要 c++11 OpenMP CMakeで推移的な解決 Library
A Library B プログラム Uses Uses プログラムが必要 C++17 OpenGL OpenMP A が必要 c++14 A requires from B OpenMP C が必要 C++17 OpenGL Library C Uses 25 © OLM Digital, Inc.
ライブラリのABI指定問題 • 依存関係を推移的な解決が必要 • プログラムからライブラリへ Library A Library B プログラム
new ABI使用 new ABI使用 Maya 2024 New ABI Library C new ABI使用 new ABI使用 26 © OLM Digital, Inc.
• find_packageの検索順番 – デフォルトはModuleからConfig – 指定ができる • Moduleで対応する – 全てのライブラリに必要
if (WIN32) set(OpenCV_DIR "${Path_to_OpenCV_Windows}")#windows, version else() list(FIND CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=1" index_flags) if(index_flags GREATER_EQUAL 0) set(OpenCV_DIR "${Path_to_OpenCV_Linux_new_ABI}" else() set(OpenCV_DIR "${Path_to_OpenCV_Linux_old_ABI}" endif() endif() find_package(OpenCV ${OpenCV_FIND_VERSION} CONFIG REQUIRED)#because OpenCv has config files ライブラリのABI指定解決手法 例: FindOpenCV.cmake Config モードでOpenCVの設定 ABIフラグのチェック フォルダーの切り替え 27 © OLM Digital, Inc.
まとめ • VFX Reference Platform – 更新で初めてABI問題を意識! – 更新を見ましょう •
対応 – くまなくコンパイル • OS毎に ‐ LinuxのABI毎に • コンパイラバージョン毎に • DCCのSDKのバージョン毎に – CMakeとCIで自動化 28 © OLM Digital, Inc.
今後 • libstdc++に関してはしばらく大丈夫? – 互換性の保証はない – DeprecatedによってAPIの互換性すらなくなる • glibcでさえ勇断ができない •
パッケージマネージャの導入で楽になる? – 全てのライブラリをソースからコンパイル • SIGGRAPH Asiaのコースでより詳細な話 – 2024年12月3日、16時、G602, G Block, Level 6 – CMake、Python、Jenkinsでの自動化 – Security – … 29 © OLM Digital, Inc. glibcのABIの安定 abi-laboratory