トップ
新規
一覧
単語検索
最終更新
ヘルプ
ログイン
アールメカブ
hidden_import_library
をテンプレートにして作成
開始行:
[[Programming]]
http://oshiete1.goo.ne.jp/qa148198.html
より引用
Unix上C++でのdllとインポートライブラリの関係
質問者:orange_pie こんにちわ。
いつも教えてgooにお世話になっているorange_pieです。
UNIX上のC++で作成した自作ライブラリをdllにして配布したい...
Unixでの基本的な考え方を教えてください。
(1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普...
※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。...
(2)通常、DLLにする場合、インポートライブラリ(.lib)と実...
(3)配布されたdllを使う側では、Link時にインポートライブラ...
(4)上記の(2)のように、インポートライブラリとライブラリの...
この質問は、自作ライブラリからlibxxx.soという形のオブジェ...
この状態でも、ライブラリの方だけコンパイルしなおして実...
ちゃんとライブラリの変更点は反映されるので問題は無いので...
これでもダイナミックリンク・ライブラリと呼べるのでしょう...
ANo.3 # すっごく暇ってわけではないんですが :-)
> -Wl,-B,dynamic -lclntsh -ldl -lm -lnsl -lsocket -lrt -l...
>
> この中の”-B, dynamic ”の辺りが「ライブラリをダイナミッ...
man ld の -l と -B のところを読めば分かると思いますが、大...
-B dynamic の場合(普通は、こっちがデフォルト)には -lxxx...
を探して、無ければ、libxxx.a を探します。-B static の場合...
対象にしません。
参考URLには solaris の AnswerBook を紹介しておきます。
> ということも考慮に入れると、arコマンドで作ったアーカイ...
いやいや。静的なライブラリ、っつう位ですから、静的なリン...
ません。
.a も .so も「ライブラリ」って名前がつきますけれど、.a は...
なので、tar の出力ファイルの方に似ています。.so の方は、...
持ち ELF というフォーマットのファイルで実行バイナリの方に...
> で、他人に提供するのにアーカイブとDLLのどちらが適してい...
> 関数などが増えた場合以外はどちらでも同じ(という感じ?...
その「他人」の環境次第なんですが、相手の OS やバージョン...
静的なアーカイブの方が、利用できる可能性が少し広いです(...
遠く及ばないですが)。
> arコマンドは、複数のオブジェクト(.o)を追加することで作...
リコンパイルではなく、再リンクです。
後、共有ライブラリの場合には、あまり小さく刻んでしまうと...
気になり出すので、ひとつのファイルの単位をどうするかを悩...
ます。
最後に、No.2 の回答にあるように unix をひと括りにして、.s...
言うのは、ちょっと大雑把すぎました。他の質問のことが頭に...
orange_pie さんが使っている環境を暗に想定してました。
十年くらいさかのぼっただけで共有ライブラリが扱えない unix...
ごろごろしてましたし。
回答者:a-kuma
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
01/10/09 17:45
参考URL: ​http://docs.sun.com:80/ab2/coll.153.4/R...
この回答へのお礼 本当にお忙しいのに、ありがとうございます...
>a も .so も「ライブラリ」って名前がつきますけれど、.a ...
>なので、tar の出力ファイルの方に似ています。.so の方は...
持ち ELF というフォーマットのファイルで実行バイナリの方に...
すばらしいです!!すっきり解決。すんなり納得。もう混乱し...
どうしたら、こんなに正しい知識を幅広くお持ちになれるんで...
もしかして、教授さん?
これからは、ぷろくまさんと呼ばせていただきます。(私だけ...
参考URLは、Solaris上でmanコマンドを叩いたのと同じ情報のよ...
これなら、いちいちターミナルからSolarisに接続しなくても良...
本当にありがとうございました。
回答良回答10pt
ANo.2 a-kumaさんの回答でだいたい良いのですが、
> (1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが...
これはUNIXの種類によります。SolarisやLINUXではその通りで...
libxxx.shになったりします。
あとlibxxx.aは静的ライブラリです。-B dynamic というリンク...
こちらがリンクされます。-B static と明示的に指定すること...
回答者:ranx
種類:回答
どんな人:経験者
自信:自信あり
回答日時:
01/10/09 17:04
この回答へのお礼 は〜。なるほど〜。です。
”.a”と言ったら一般的に静的だと思えばよいのですね。
それならばやはり”.so”です。
ちなみにSolarisでの開発なので、libxxxx.soと言う形にしまし...
このようなルールって、厳密に決められている訳ではなくて
”通常、こうだよね”というような、経験者の方に聞かなければ...
無事にdllを作成して、配布できるまでに至りました。
みなさんのおかげです。
本当にありがとうございました。
回答
ANo.1 > (1)Unix上ではDLLの標準的な名称は”libxxxx.so”とす...
そうです。
OS によっては、libxxx.so は、libxxx.so.バージョン番号 と...
シンボリックリンクになってたりしますが、ローダが *.so と...
探しに行くことが基本なのは一緒です。
> (2)通常、DLLにする場合、インポートライブラリ(.lib)と...
unix では、インポートライブラリなんて不細工なものは気にし...
直接、共有ライブラリがリンクできることは経験した通り。
> (3)配布されたdllを使う側では、Link時にインポートライブ...
インポートライブラリなんてものが要らないのは (2) の回答で...
インクルードファイルが必要なのは、C/C++ で共通の定数やプ...
記述してあるから、という理由なだけで、「DLLを使う」ための...
ありません。
> (4)上記の(2)のように、インポートライブラリとライブラリ...
というわけで、unix のマニュアルを見ても永遠に分かることは...
> これでは結局ライブラリの本体が一緒にリンクされている様...
ちょっと信じられません。
> ライブラリの方だけコンパイルしなおして実行するとちゃん...
ということから、共有ライブラリとしてはきちんと作成されて...
多分、静的なライブラリをリンクしたつもりになっているだけ...
ライブラリがリンクされているはずです。
ld の man などに、libxxx.a と libxxx.so の両方が存在して...
動作について説明があるはずです。libxxx.so を削除してしま...
もう一度、リンクをしてみてください。
実際にモジュールの参照が静的に解決されているかどうかは、n...
コマンドで確認することが出来ます。
回答者:a-kuma
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
01/10/09 15:00
この回答へのお礼 なるほど〜。
インポートライブラリって、確かOS/2だかWindowsだかでDLLを...
それから、
>多分、静的なライブラリをリンクしたつもりになっているだ...
>動的なライブラリがリンクされているはずです。
についてですが、静的なライブラリをリンクしていたつもりのM...
-Wl,-B,dynamic -lclntsh -ldl -lm -lnsl -lsocket -lrt -lpt...
この中の”-B, dynamic ”の辺りが「ライブラリをダイナミック...
そうだとすると、「静的にリンクしていたつもりで、実はもと...
ん?
それでは、".a”と”.so”の違いってなんでしょう?
以前、くまさんが教えてくださった、
>ar コマンドで作成されるアーカイブとは違って、DLL は「リ...
なく、常に再リンクをすることに注意してください。
ということも考慮に入れると、arコマンドで作ったアーカイブ...
で、他人に提供するのにアーカイブとDLLのどちらが適している...
関数などが増えた場合以外はどちらでも同じ(という感じ?な...
arコマンドは、複数のオブジェクト(.o)を追加することで作成...
ということになるのでしょうか?
Unix的に美しいのは、.soですよね。きっと。
あ〜。長々とすみません。
いろいろありがとうございます。
くまさんもお忙しいでしょうから、お返事はすっごく暇なとき...
良いです。お返事がなくても自分でアーカイブとDLLの違いくら...
これ[[http://qualapps.blogspot.com/2007/08/how-to-create-...
How To Create 32-bit Import Libraries Without .OBJs or So...
This article is intentionally titled the same as Microsof...
There are some functions in the Win32 API that have no im...
Obviously it would be preferable to have a .LIB to link a...
If the function were __cdecl, then the function name shou...
The Q131313 article discusses the general case of manuall...
In spite of those warnings, I spent quite a bit of time t...
; Raw function name
RemoveControlByName
; Alias the undecorated name to __stdcall
RemoveControlByName=RemoveControlByName@20
; Explicit reference to the necessary DLL
RemoveControlByName@20 = OCCACHE.RemoveControlByName
However, none of these generated a .LIB that worked. The ...
I thought I'd learn something by looking at the symbol th...
__imp_?RemoveControlByName@20
I knew my header file was correct, so that was definitely...
I've tried to solve this problem two other times in the l...
I tried the second option in the KB article, described un...
Anyway, I created the functions as described in the KB ar...
extern "C" {
#include "occache.h"
};
If you look in any of the standard Windows include files,...
I also updated all of the function signatures in the head...
I compiled it, linked my main application to the new .LIB...
I examined the .LIB with DUMPBIN. Under Public Symbols, I...
_RemoveControlByName@20
__imp__RemoveControlByName@20
It appears that the "__imp" definition was a result of ad...
Continuing my examination of the DUMPBIN information, I s...
Archive member name at FE0: OCCACHE.DLL/
46D12949 time/date Sun Aug 26 00:18:33 2007
uid
gid
0 mode
38 size
correct header end
Version : 0
Machine : 14C (x86)
TimeDateStamp: 46D12949 Sun Aug 26 00:18:33 2007
SizeOfData : 00000024
DLL name : OCCACHE.DLL
Symbol name : _RemoveControlByName@20
Type : code
Name type : name
Hint : 9
Name : _RemoveControlByName@20
To determine whether or not this was correct, I used DUMP...
I added a .DEF file and spent several hours trying variou...
EXPORTS
RemoveControlByName
I built my application, it linked, and it ran. What happe...
I ran DUMPBIN again on my library. The record describing ...
Archive member name at FFC: OCCACHE.DLL/
46D12740 time/date Sun Aug 26 00:09:52 2007
uid
gid
0 mode
38 size
correct header end
Version : 0
Machine : 14C (x86)
TimeDateStamp: 46D12740 Sun Aug 26 00:09:52 2007
SizeOfData : 00000024
DLL name : OCCACHE.DLL
Symbol name : _RemoveControlByName@20
Type : code
Name type : undecorate
Hint : 6
Name : RemoveControlByName
Also, the very last line in the record showed that the "N...
It's clear that there's quite a bit of undocumented behav...
In summary, to create a .LIB file that will let you link ...
1. Follow the instructions in Q131313 under Stubbing O...
2. Make sure your dummy functions are defined with __d...
3. For the header file used by the parent application,...
4. Add a .DEF file to your project that includes the f...
終了行:
[[Programming]]
http://oshiete1.goo.ne.jp/qa148198.html
より引用
Unix上C++でのdllとインポートライブラリの関係
質問者:orange_pie こんにちわ。
いつも教えてgooにお世話になっているorange_pieです。
UNIX上のC++で作成した自作ライブラリをdllにして配布したい...
Unixでの基本的な考え方を教えてください。
(1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普...
※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。...
(2)通常、DLLにする場合、インポートライブラリ(.lib)と実...
(3)配布されたdllを使う側では、Link時にインポートライブラ...
(4)上記の(2)のように、インポートライブラリとライブラリの...
この質問は、自作ライブラリからlibxxx.soという形のオブジェ...
この状態でも、ライブラリの方だけコンパイルしなおして実...
ちゃんとライブラリの変更点は反映されるので問題は無いので...
これでもダイナミックリンク・ライブラリと呼べるのでしょう...
ANo.3 # すっごく暇ってわけではないんですが :-)
> -Wl,-B,dynamic -lclntsh -ldl -lm -lnsl -lsocket -lrt -l...
>
> この中の”-B, dynamic ”の辺りが「ライブラリをダイナミッ...
man ld の -l と -B のところを読めば分かると思いますが、大...
-B dynamic の場合(普通は、こっちがデフォルト)には -lxxx...
を探して、無ければ、libxxx.a を探します。-B static の場合...
対象にしません。
参考URLには solaris の AnswerBook を紹介しておきます。
> ということも考慮に入れると、arコマンドで作ったアーカイ...
いやいや。静的なライブラリ、っつう位ですから、静的なリン...
ません。
.a も .so も「ライブラリ」って名前がつきますけれど、.a は...
なので、tar の出力ファイルの方に似ています。.so の方は、...
持ち ELF というフォーマットのファイルで実行バイナリの方に...
> で、他人に提供するのにアーカイブとDLLのどちらが適してい...
> 関数などが増えた場合以外はどちらでも同じ(という感じ?...
その「他人」の環境次第なんですが、相手の OS やバージョン...
静的なアーカイブの方が、利用できる可能性が少し広いです(...
遠く及ばないですが)。
> arコマンドは、複数のオブジェクト(.o)を追加することで作...
リコンパイルではなく、再リンクです。
後、共有ライブラリの場合には、あまり小さく刻んでしまうと...
気になり出すので、ひとつのファイルの単位をどうするかを悩...
ます。
最後に、No.2 の回答にあるように unix をひと括りにして、.s...
言うのは、ちょっと大雑把すぎました。他の質問のことが頭に...
orange_pie さんが使っている環境を暗に想定してました。
十年くらいさかのぼっただけで共有ライブラリが扱えない unix...
ごろごろしてましたし。
回答者:a-kuma
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
01/10/09 17:45
参考URL: ​http://docs.sun.com:80/ab2/coll.153.4/R...
この回答へのお礼 本当にお忙しいのに、ありがとうございます...
>a も .so も「ライブラリ」って名前がつきますけれど、.a ...
>なので、tar の出力ファイルの方に似ています。.so の方は...
持ち ELF というフォーマットのファイルで実行バイナリの方に...
すばらしいです!!すっきり解決。すんなり納得。もう混乱し...
どうしたら、こんなに正しい知識を幅広くお持ちになれるんで...
もしかして、教授さん?
これからは、ぷろくまさんと呼ばせていただきます。(私だけ...
参考URLは、Solaris上でmanコマンドを叩いたのと同じ情報のよ...
これなら、いちいちターミナルからSolarisに接続しなくても良...
本当にありがとうございました。
回答良回答10pt
ANo.2 a-kumaさんの回答でだいたい良いのですが、
> (1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが...
これはUNIXの種類によります。SolarisやLINUXではその通りで...
libxxx.shになったりします。
あとlibxxx.aは静的ライブラリです。-B dynamic というリンク...
こちらがリンクされます。-B static と明示的に指定すること...
回答者:ranx
種類:回答
どんな人:経験者
自信:自信あり
回答日時:
01/10/09 17:04
この回答へのお礼 は〜。なるほど〜。です。
”.a”と言ったら一般的に静的だと思えばよいのですね。
それならばやはり”.so”です。
ちなみにSolarisでの開発なので、libxxxx.soと言う形にしまし...
このようなルールって、厳密に決められている訳ではなくて
”通常、こうだよね”というような、経験者の方に聞かなければ...
無事にdllを作成して、配布できるまでに至りました。
みなさんのおかげです。
本当にありがとうございました。
回答
ANo.1 > (1)Unix上ではDLLの標準的な名称は”libxxxx.so”とす...
そうです。
OS によっては、libxxx.so は、libxxx.so.バージョン番号 と...
シンボリックリンクになってたりしますが、ローダが *.so と...
探しに行くことが基本なのは一緒です。
> (2)通常、DLLにする場合、インポートライブラリ(.lib)と...
unix では、インポートライブラリなんて不細工なものは気にし...
直接、共有ライブラリがリンクできることは経験した通り。
> (3)配布されたdllを使う側では、Link時にインポートライブ...
インポートライブラリなんてものが要らないのは (2) の回答で...
インクルードファイルが必要なのは、C/C++ で共通の定数やプ...
記述してあるから、という理由なだけで、「DLLを使う」ための...
ありません。
> (4)上記の(2)のように、インポートライブラリとライブラリ...
というわけで、unix のマニュアルを見ても永遠に分かることは...
> これでは結局ライブラリの本体が一緒にリンクされている様...
ちょっと信じられません。
> ライブラリの方だけコンパイルしなおして実行するとちゃん...
ということから、共有ライブラリとしてはきちんと作成されて...
多分、静的なライブラリをリンクしたつもりになっているだけ...
ライブラリがリンクされているはずです。
ld の man などに、libxxx.a と libxxx.so の両方が存在して...
動作について説明があるはずです。libxxx.so を削除してしま...
もう一度、リンクをしてみてください。
実際にモジュールの参照が静的に解決されているかどうかは、n...
コマンドで確認することが出来ます。
回答者:a-kuma
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
01/10/09 15:00
この回答へのお礼 なるほど〜。
インポートライブラリって、確かOS/2だかWindowsだかでDLLを...
それから、
>多分、静的なライブラリをリンクしたつもりになっているだ...
>動的なライブラリがリンクされているはずです。
についてですが、静的なライブラリをリンクしていたつもりのM...
-Wl,-B,dynamic -lclntsh -ldl -lm -lnsl -lsocket -lrt -lpt...
この中の”-B, dynamic ”の辺りが「ライブラリをダイナミック...
そうだとすると、「静的にリンクしていたつもりで、実はもと...
ん?
それでは、".a”と”.so”の違いってなんでしょう?
以前、くまさんが教えてくださった、
>ar コマンドで作成されるアーカイブとは違って、DLL は「リ...
なく、常に再リンクをすることに注意してください。
ということも考慮に入れると、arコマンドで作ったアーカイブ...
で、他人に提供するのにアーカイブとDLLのどちらが適している...
関数などが増えた場合以外はどちらでも同じ(という感じ?な...
arコマンドは、複数のオブジェクト(.o)を追加することで作成...
ということになるのでしょうか?
Unix的に美しいのは、.soですよね。きっと。
あ〜。長々とすみません。
いろいろありがとうございます。
くまさんもお忙しいでしょうから、お返事はすっごく暇なとき...
良いです。お返事がなくても自分でアーカイブとDLLの違いくら...
これ[[http://qualapps.blogspot.com/2007/08/how-to-create-...
How To Create 32-bit Import Libraries Without .OBJs or So...
This article is intentionally titled the same as Microsof...
There are some functions in the Win32 API that have no im...
Obviously it would be preferable to have a .LIB to link a...
If the function were __cdecl, then the function name shou...
The Q131313 article discusses the general case of manuall...
In spite of those warnings, I spent quite a bit of time t...
; Raw function name
RemoveControlByName
; Alias the undecorated name to __stdcall
RemoveControlByName=RemoveControlByName@20
; Explicit reference to the necessary DLL
RemoveControlByName@20 = OCCACHE.RemoveControlByName
However, none of these generated a .LIB that worked. The ...
I thought I'd learn something by looking at the symbol th...
__imp_?RemoveControlByName@20
I knew my header file was correct, so that was definitely...
I've tried to solve this problem two other times in the l...
I tried the second option in the KB article, described un...
Anyway, I created the functions as described in the KB ar...
extern "C" {
#include "occache.h"
};
If you look in any of the standard Windows include files,...
I also updated all of the function signatures in the head...
I compiled it, linked my main application to the new .LIB...
I examined the .LIB with DUMPBIN. Under Public Symbols, I...
_RemoveControlByName@20
__imp__RemoveControlByName@20
It appears that the "__imp" definition was a result of ad...
Continuing my examination of the DUMPBIN information, I s...
Archive member name at FE0: OCCACHE.DLL/
46D12949 time/date Sun Aug 26 00:18:33 2007
uid
gid
0 mode
38 size
correct header end
Version : 0
Machine : 14C (x86)
TimeDateStamp: 46D12949 Sun Aug 26 00:18:33 2007
SizeOfData : 00000024
DLL name : OCCACHE.DLL
Symbol name : _RemoveControlByName@20
Type : code
Name type : name
Hint : 9
Name : _RemoveControlByName@20
To determine whether or not this was correct, I used DUMP...
I added a .DEF file and spent several hours trying variou...
EXPORTS
RemoveControlByName
I built my application, it linked, and it ran. What happe...
I ran DUMPBIN again on my library. The record describing ...
Archive member name at FFC: OCCACHE.DLL/
46D12740 time/date Sun Aug 26 00:09:52 2007
uid
gid
0 mode
38 size
correct header end
Version : 0
Machine : 14C (x86)
TimeDateStamp: 46D12740 Sun Aug 26 00:09:52 2007
SizeOfData : 00000024
DLL name : OCCACHE.DLL
Symbol name : _RemoveControlByName@20
Type : code
Name type : undecorate
Hint : 6
Name : RemoveControlByName
Also, the very last line in the record showed that the "N...
It's clear that there's quite a bit of undocumented behav...
In summary, to create a .LIB file that will let you link ...
1. Follow the instructions in Q131313 under Stubbing O...
2. Make sure your dummy functions are defined with __d...
3. For the header file used by the parent application,...
4. Add a .DEF file to your project that includes the f...
ページ名: