コンパイル周りについてまだまだ理解が浅いので、色々とメモしていきます。(随時更新予定)
gccコマンドのオプションメモ
- -I インクルードファイルを検索するパスを指定
- -L ライブラリを探すパスを指定
- -l リンクしたいライブラリ名を指定
-
libhoge.a
と、lib
を接頭辞として付ける -
-lhoge
と、lib
を抜いて指定する
-
includeパスをコマンドラインオプションで指定する場合
gcc -o sample -I/usr/local/hoge main.c
再帰的には読み込まないので、指定したディレクトリ以下がさらにディレクトリで分かれている場合は、#include <hoge/fuga.h>
のようにパスを指定する必要あり。
ライブラリパスをコマンドラインオプションで指定する場合
gcc -o sample -L/usr/local/lib/hoge -lfoo -lbar main.c
ライブラリ検索パスに/usr/local/lib/hoge
を追加し、さらにそこからふたつのライブラリlibfoo.a
、libbar.a
を読み込む指定。
ライブラリの読み込みで実行時エラーが出る場合
例えばこんなエラー。
dyld: Library not loaded: /usr/local/lib/libpng15.15.dylib
Referenced from: /usr/local/Cellar/opencv/2.4.7.1/lib/libopencv_highgui.2.4.7.dyl
動的にライブラリを読み込もうとしてエラーが出てるので、適切にライブラリをインストールするか、あるいはライブラリのパスを以下のように環境変数に設定して読み込めるようにしてあげる必要がある。
if [ -n "$DYLD_LIBRARY_PATH" ]; then
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/Cellar/opencv/2.4.7.1/lib
else
DYLD_LIBRARY_PATH=/usr/local/Cellar/opencv/2.4.7.1/lib
fi
export DYLD_LIBRARY_PATH
- -O2
-O2
は最適化のレベルを指定するオプションです。(OptimizeのO?)
(レベルは0〜3があるようです)
インクルードパス、ライブラリパスを追加する(for Mac)
以下のように、CPATH
、LIBRARY_PATH
環境変数にコロン:
区切りで指定します。
export CPATH=$CPATH:/usr/local/include
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
アーカイブファイルを作る - ar
コマンド
ar -rcs libhoge.a foo.o bar.o
foo.o
、bar.o
オブジェクトファイルを、libhoge.a
ファイルにアーカイブする。
- -r ... すでに.aファイルがある場合に上書きする
- -c ... フィードバックなしにアーカイブを作成する
- -s ...
.a
ファイルの先頭にインデックスを作成するよう指示