これは、 C++ Advent Calendar 2019 の10日目の記事です。
昨日は @mdstoy さんによる next_combinationを実装してみた でした。
FBX SDK入りのDockerイメージを作ってみる
Linux版のFBX SDKを使うことになったので、Dockerでの環境構築手順をまとめました。
サンプルコードはこちらです。
GitHub / segurvita / fbx_sdk_cpp_sample
フォルダー階層
最終的なフォルダー階層はこんな感じになります。
作業ディレクトリ/
├ docker-compose.yml
├ Dockerfile
└ src/
├ build.sh
└ main.cpp
src/main.cppを作る
まずは、 main.cpp
を作ります。
とりあえず、以下のように、FBXマネージャーを生成してすぐに破棄するだけのコードにします。
#include <stdio.h>
#include <fbxsdk.h>
int main()
{
// FBXマネージャーを生成する
FbxManager *lSdkManager = FbxManager::Create();
// FBXマネージャーを破棄する
lSdkManager->Destroy();
// エラーが起きなれば成功表示
printf("Success!");
}
lSdkManager
の先頭の l
は、ローカル変数という意味です。FBXSDKのサンプルコードの命名規則なので、したがっておきます。
このあたりの命名規則は以下の記事にまとめましたので、興味がある方はご覧ください。
Dockerfileを作る
次に Dockerfile
を作りましょう。こんな感じです。
# gccのDockerイメージを元にする
FROM gcc:9.2
# 作業ディレクトリを作成
WORKDIR /fbx-sdk/
# tar.gzファイルをダウンロードする
RUN curl -L \
https://www.autodesk.com/content/dam/autodesk/www/adn/fbx/20195/fbx20195_fbxsdk_linux.tar.gz \
-o /tmp/fbx20195_fbxsdk_linux.tar.gz
# インストール先フォルダを作成する
RUN mkdir -p /fbx-sdk/install
# tar.gzファイルを解凍する
RUN tar -zxvf /tmp/fbx20195_fbxsdk_linux.tar.gz -C /fbx-sdk
# インストールする
RUN echo "yes\nn" | /fbx-sdk/fbx20195_fbxsdk_linux /fbx-sdk/install
# tar.gzファイルを削除する
RUN rm /tmp/fbx20195_fbxsdk_linux.tar.gz
FBX SDK公式ドキュメントによると、Linux版のコンパイラはgcc 4が推奨のようなので、Dockerイメージもgcc:4.9.4
にしました。
Configuring the FBX SDK for Linux
gcc:9.2
でも動作することを確認いたしました! @yumetodo さんご指摘ありがとうございました!
docker-compose.ymlを作る
次に、 docker-compose.yml
を作成します。
version: '3'
services:
fbx-sdk-cpp:
build:
context: ./
dockerfile: ./Dockerfile
volumes:
- ./src:/src
working_dir: /src
command: /src/build.sh
起動コマンドに /src/build.sh
を指定しておきます。
src/build.shを作る
今度は、ビルド&実行用のスクリプトを作成します。
# main.cppをビルドする
g++ -std=c++11 \
-o /src/main \
-I/fbx-sdk/install/include \
/src/main.cpp \
/fbx-sdk/install/lib/gcc/x64/release/libfbxsdk.a \
-ldl -lltdl -llzma -lpthread -lxml2 -lz
# 実行する
/src/main
gccのオプションでつまづきました。
どうやらC++11を指定しなければいけないようです。
また、必要なライブラリを1つ1つ丁寧に指定する必要もありました。
Dockerイメージを作成する
以下のコマンドでDockerイメージを作成します。
# Dockerイメージを作成する
docker-compose build
仮想のLinuxマシンにFBX SDKがインストールされる様子が表示されます。数分待ちましょう。
Dockerで実行する
いよいよ実行しましょう。
以下のコマンドを叩くと、Dockerコンテナーが生成され、そのコンテナー内で build.sh
が実行されます。
# Dockerコンテナを作成し、build.shを実行する
docker-compose up
実行すると、以下のように表示されます!
Success!
無事にFBX SDKを読み込むことができました!
(warning等が表示されますが、とりあえずは無視します)
さいごに
本記事作成にあたり、以下の記事を参考にさせていただきました。ありがとうございました。
これは、 C++ Advent Calendar 2019 の10日目の記事でした。
明日は @tyu_ru_cpp さん による min/maxみたいな関数の呼び出し です!