2011-02-04 10 views

答えて

5

.libライブラリがリンクされ静的あり、そしてそれは、彼らはLinkerリンク時解決名前のシンボルに、用に作成されている、とlink-timeruntimeを発生する目的です。彼らはであり、しばしばと呼ばれます。"静的ライブラリ"(私はあなたの質問にこのタグを追加しました!それはlibの簡単な話です。

ただし、実際に実行時にリンクする場合は、DLLラッパーを作成できます。

+2

実際、これらのライブラリは**本質的に**静的なものです! – Emmanuel

2

いいえ。代わりにDLLを作成するか、ソースがない場合は.libの機能を独自のDLLインターフェイスでラップします。

+0

実際にそのインタビューで尋ねた。とにかく、あなたの追加情報+1。 – bjskishore123

0

はい - 直接ではなく、非常に少ない作業量です。

新しい.DLLプロジェクトを作成し、.libをリンクし、エクスポートする関数を.DEFファイルに定義してコンパイルします。

1

いいえ、不可能です。 DLLは、プロセスにロードするためのすべての情報を持つPE32ヘッダーを持つモジュールです。 LIBは、OBJファイルのアーカイブのみです。

他にも、DLLを簡単にラップするとは言えますが、これはかなり難しいことがあります。理由は、.LIBはいくつかの依存関係を解決するだけでなく、未解決の外部も持つことができるからです。

これらの未解決の外部がコンパイラのランタイムライブラリのみを必要とする限り、DLLでのラッピングが機能する可能性があります。おそらく最小のC++ソースを使用してDLLプロジェクトを作成し、コンパイルを試みるときにこれを確認できます。それ以上の外部を他の図書館で解決しなければならないかどうかは分かります。

メモリ管理で重要な問題が1つ発生する可能性があります。 .LIBと静的にリンクすると、すべてと同じ定義が使用されます。ライブラリに独自の実装が付属している場合、malloc-stlye関数について言えば、これらのシンボルをすべてEXPORTリストに追加する限り、アプリケーションにリンクされません。 EXPORTテーブルに含めるべきパブリックシンボルのリストを見つけることは苦痛であるかもしれません。

関連する問題