■■■■■■□■■■■■■□■■■■■■□□□□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■■■■■□■■□□□□
■■□□■■□■■□□■■□■■□□□□□■■□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■□□■■□□□□□■■
■■□□■■□■■■■■■□■■■■■■□■■■■■■□■■■■■■

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

ダイナミックリンクとスタティックリンクの混在(MinGW環境)

結論から言うと、
あるライブラリは静的、あるライブラリは動的にリンクしたいという場合
gccの-staticオプションは全体に効いちゃうから
リンカに直接オプションを渡すといいよ。という話。
gcc … -Wl,-lmigemo,-dn,-llua …
(migemoはダイナミック、luaはスタティック)

※『みたい』、『ようです』の憶測が多いのは
ちゃんとドキュメント見てなくて、経験則だからです。

hogeというライブラリをダイナミックリンクする場合コンパイラ(リンカ)は
libhoge.dll.a → libhoge.aの順にインポートライブラリを探してくれますが、
スタティックリンクの場合は
libhoge.a
しか探しに行きません(のようです)。
したがって、明示的にダイナミックリンクするライブラリならlib~.dll.aという名前を、
それ以外はlib~.aという名前を、両方ありえるなら二つとも用意すればいいわけです。

で、ライブラリのリンクのダイナミック/スタティックを指定するオプションとして
gccには-staticというオプションがあるんですが、
これは-l<ライブラリ名>で与えられたライブラリ全体に効いてくるみたいです。
ですので、
gcc … -lmigemo -static -llua
としたら、luaだけスタティックリンクにして欲しいところですが~
migemoもスタティックリンクしようとしてlibmigemo.aだけ探しに行きます。
libmigemo.dll.aしかない場合はlibmigemo.aが見つからず
-lmigemoは無効だよ!ってことでコンパイルエラーです。

それに対して記事冒頭のようにリンカに直接オプションを渡した場合は
-dn(-Bstatic)オプションより前のライブラリはダイナミックリンク、
オプションより後ろのライブラリはスタティックリンクとして扱ってくれるみたいです。
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2012/02/15(水) 23:21:06|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0
home

プロフィール

Author:nocd5
30歳(男)
会社員

Last.fm



最近の記事

--年--月--日 (--)
スポンサーサイト
2012年02月15日 (水)
ダイナミックリンクとスタティックリンクの混在(MinGW環境)

カテゴリー

カレンダー

01 | 2012/02 | 03
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 - - -

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

Amazonアソシエイト

RSSフィード

リンク

このブログをリンクに追加する

FC2ブログランキング

FC2Blog Ranking

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。