あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

2017年04月

共有ライブラリは、"lib****.so", "lib****.so.バージョン番号"という名前のファイル。
"lib****.so.バージョン番号"がライブラリ本体であり、"lib****.so"はライブラリ本体へのリンク。
gccのオプションで-l****とすると、"lib****.so"からリンクを辿って、"lib****.so.バージョン番号"が読み込まれる。
このような構造にすることで、バージョンの違いを吸収できる。

共有ライブラリのパスは、/lib, /usr/lib, $LD_LIBRARY_PATH, /etc/ld.so.confに書いたディレクトリである。
ただし、OSは/etc/ld.so.confを直接参照せずに、/etc/ld.so.cacheを参照するので、
/etc/ld.so.confの中身を変更した場合は、ldconfigコマンドでその中身を/etc/ld.so.cacheに反映させる。

pkg-configを利用することでヘッダやライブラリの指定を簡略化することができる。
例えば、OpenCVの場合、"pkg-config --cflags opencv"で"-I /opt/local/include/opencv"、
"pkg-config --libs opencv"で"-L /opt/local/lib -lml -lcvaux -lhighgui -lcv -lcxcore"と
リストアップすることができる。
この処理は、(ライブラリ作成者によって提供される).pcファイルを参照することによって行われる。
.pcファイルのパスは環境変数PKG_CONFIG_PATHに設定する。

・参考記事
https://www.glamenv-septzen.net/nifty/others/computer/linux_ldd01.html

http://archive.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/shared-libraries.html

http://linux.dogrow.net/?p=25

http://www.yasutomo57jp.com/2010/09/01/linux%E3%81%A7opencv%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E9%81%A9%E5%BD%93%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%99%E3%82%8B%E3%81%BE%E3%81%A7/

混乱したので整理してみました。

無題

glOrtho()で、near=-1, far=1に設定したとします。
すると、前方面のz値=-near=1, 後方面のz値=-far=-1となります。
OpenGLは手前側がz軸の正方向なので、正負が入れ替わるのですね。
一方、デプスバッファの値(デプス値)は、前方面のデプス値が0, 後方面のデプス値が1となるように書き込まれます。
ですので、例えば、頂点1のようにz=0.5の頂点を描画すると、デプス値は0.25になり、
頂点2のようにz=-0.5の頂点を描画すると、デプス値は0.75となります。

参考ページ
http://d.hatena.ne.jp/tueda_wolf/20110726/p1

以上です。

SfMのオープンソースOpenMVGをVisualStudio2015でビルドする方法を紹介します。

・厄介なところ
VS2015だと以下のstdioの互換性問題が発生し、VS2013だとC++11のconstexprに対応していないので、そのままだとVS2015でもVS2013でもビルドできません。
http://stackoverflow.com/questions/30412951/unresolved-external-symbol-imp-fprintf-and-imp-iob-func-sdl2

本記事では、stdio問題への対応を含め、OpenMVGをVS2015でビルドする方法を紹介します。

1. ソースコード入手
以下のページからソースコードを入手します。
それだけだとsrc/dependenciesが空なので、git submodule update -iします。
https://github.com/openMVG/openMVG

2. CMake
警告がたくさん出ますが無視しても大丈夫です。
下手にMOSEKなど必須でないライブラリを使おうとするとバージョン問題でビルドできなかったりするようです。

3. stdio問題対応
samplesとsoftwareの全てのプロジェクトについて以下の対応を行う。

一.
extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }
と書いたヘッダファイルを用意してインクルードする。

二.
legacy_stdio_definition.libをリンクする。


以上で、OpenMVGをVS2015でビルドできるはずです。

↑このページのトップヘ