Cygwin環境で、c++で書かれたコードから静的・共用ライブラリを作成・リンクした際に嵌ったため備忘録を残そうと思う。
##環境
- Cygwin (ver. 3.05)
- gcc (ver. 7.4.0)
##やりたかったこと
- c++で作成した道具をライブラリにまとめて整理したい。
- そのために、c++で静的ライブラリ・共有ライブラリを作成したい。
- ライブラリの作成・リンク時に
-L
,-I
オプションでパスを指定するのではなく、環境変数で指定したい。
例えば、こうではなく(ライブラリ名はlibname.soとする)、
$g++ -L../lib -o main main.o -lname
次のようにしたい。
$g++ -o main main.o -lname
##-I
で指定せずに環境変数でインクルードパスを指定する
- ヘッダーファイルのインクルードパスは、__CPLUS_INCLUDE_PATH__で指定すればよい。
##-L
で指定せずに環境変数でライブラリパスを指定する
- cygwin環境下では、gccは__LD_LIBARRY_PATH__は読み込まないらしい(__PATH__に書く)。
- 静的ライブラリの場合は、__LIBARRY_PATH__を読み込む。
##-l
オプションで指定するライブラリ名についての注意
####e.g., ライブラリ名が、lib{name}.[so|a]の場合、
- 静的ライブラリの場合は、__-l{name}__で指定
- 共有ライブラリの場合は、__-llib{name}__で指定
つまり、共有ライブラリではlibをとっては駄目。
※これは、Linux環境と違うよね...
##その他
- ライブラリ作成時のライブラリパスと、実行時のライブラリパスは違うとかなんとか
(この辺は確かめてないです)。 - 内容に間違いがあるかもしれません。ご指摘いただけると幸いです。