0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++Advent Calendar 2019

Day 10

C++版FBX SDK入りのDockerイメージを作ってみる

Last updated at Posted at 2019-12-09

これは、 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マネージャーを生成してすぐに破棄するだけのコードにします。

main.cpp
#include <stdio.h>
#include <fbxsdk.h>

int main()
{
    // FBXマネージャーを生成する
    FbxManager *lSdkManager = FbxManager::Create();
    
    // FBXマネージャーを破棄する
    lSdkManager->Destroy();
    
    // エラーが起きなれば成功表示
    printf("Success!");
}

lSdkManager の先頭の l は、ローカル変数という意味です。FBXSDKのサンプルコードの命名規則なので、したがっておきます。

このあたりの命名規則は以下の記事にまとめましたので、興味がある方はご覧ください。

FBX SDK の pScene と lScene の違い

Dockerfileを作る

次に 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 を作成します。

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を作る

今度は、ビルド&実行用のスクリプトを作成します。

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みたいな関数の呼び出し です!

0
1
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?