1
2

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 5 years have passed since last update.

Cygwinでg++を使用する際にはまったこと

Last updated at Posted at 2019-04-04

 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環境と違うよね...

##その他

  • ライブラリ作成時のライブラリパスと、実行時のライブラリパスは違うとかなんとか
    (この辺は確かめてないです)。
  • 内容に間違いがあるかもしれません。ご指摘いただけると幸いです。
1
2
0

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?