石像備忘録

モアイ像がいろんなメモを書き残す場

MeshLab2016.12をビルドした時のメモ

こんにちは、しもむ~です。

ある事情によりCentOS7にMeshLabをソースコードからビルドする必要があったので
その作業中に詰まったところ等のメモを書いておきます。

なお、今回ビルド時に発生したエラー等は
今後修正&改善されると思われるのであくまで参考までに

Meshlab

MeshLab

Meshlabは3Dデータの編集、変換が可能なフリーのソフトウェアです。
モデリングソフトではないので1からモデルを作成することは出来ませんが、
点群処理の機能も備えており、
点群に法線を付与、ダウンサンプリング、メッシュ化等を行うことが出来ます。

今回ビルドしたMeshLabのバージョンは2016.12です。

環境

今回の作業環境です。

  • CentOS 7.1

  • gcc4.8.5

  • qmake 3.0

  • Qt 5.3

特にQtのバージョンは5以上が必須です。
それ以前のQtではmeshlab内部で呼び出している関数の一部に互換性なく、
ビルドに失敗します。

ダウンロード

MeshLabのページからソースコードをダウンロードできます。

MeshLab

また、MeshLabをビルドするのに別途必要なプログラムを
以下のURLからダウンロードします。

github.com

また、後ほど説明しますがソースコードに内包している
特定のライブラリが原因でビルドが失敗する可能性があるので、
それの対策用に以下のURLからファイルをダウンロードしておきます。
http://mpir.org/mpir-2.4.0.tar.bz2

ビルド

ビルドする前に、先程ダウンロードしてきたファイルのうち、
meshlabとvcglib-1.0.1を解凍し、vcglib-1.0.1をリネームします。

tar xvzf meshlab-2016.12.tar.gz  
unzip vcglib-1.0.1.zip  
mv vcglib-1.0.1 vcglib  

以下のような配置になればOKです。

Downloads/  
    |  
    ├──meshlab-2016.12  
    │      ├──docs  
    │      ├──README.md  
    │      ├──src  
    │      ├──...  
    │      └──...  
    └──vcglib  
           ├──apps  
           ├──doc  
           ├──eigenlib  
           ├──...  
           └──...  

まずmeshlab-2016.12/src/external内のプログラムをビルドします 。

cd meshlab-2016.12/src/external  
qmake -r external.pro  
make 

次に一つ上の階層に戻り、
MeshLab本体をビルドします。

cd ../  
qmake -r meshlab_full.pro  
make  

//中略  

Cannot find file: .../Downloads/meshlab-2016.12/src/plugins_experimental/io_TXT/io_TXT.pro.  
make: *** [sub-plugins_experimental-io_TXT-make_first-ordered] エラー 2  

ここでこのようなエラーメッセージがでました。
.proの名前が想定されたものと微妙に違うようです。

mv plugins_experimental/io_TXT/io_txt.pro plugins_experimental/io_TXT/io_TXT.pro

リネームし再度make

make

//中略

g++ -Wl,-O1 -Wl,-z,relro -shared -o libfilter_csg.so filter_csg.o moc_filter_csg.o  -L../../distrib -lcommon -lGLU ../../external/lib/linux-g++/libmpirxx.a ../../external/lib/linux-g++/libmpir.a -lQt5OpenGL -lQt5Widgets -lQt5Gui -lQt5Xml -lQt5XmlPatterns -lQt5Network -lQt5Script -lQt5Core -lGL -lpthread
/usr/bin/ld: ../../external/lib/linux-g++/libmpir.a(lt4-clear.o): 認識できない再配置 (0x2a) がセクション `.text' にあります
/usr/bin/ld: 最終リンクに失敗しました: 不正な値です
collect2: エラー: ld はステータス 1 で終了しました
make[1]: *** [../../distrib/plugins/libfilter_csg.so] エラー 1

次にこのようなエラーが発生しました。
どうやらexternalビルド時に生成したlibmpirをリンクできないようです。
もしこのエラーが発生した場合、先程ダウンロードしておいた
mpir-2.4.0.tar.gz2が必要になるので、解凍しmakeします。

cd ../../
tar xf mpir-2.4.0.tar.gz2
cd mpir-2.4.0
./configure --enable-cxx --enable-static --with-pic  
make 

makeが上手く言った場合、生成されたライブラリファイルを   meshlab/externalの中の所定の場所にコピーします  

cp .libs/libmpir*.a ../meshlab-2016.12/src/external/lib/linux-g++/  
cd ../meshlab-2016.12/src/  

再度makeし、無事成功しました。
実行ファイルは  

./distrib/meshlab

にあります。

f:id:simomuuu:20171123155540p:plain:w500

Hello MeshLab
あとはpathを通すなり移動させるなりして完了です。  

※参考 github.com
github.com