スタティックライブラリについて

[戻る]
.Lib素人 2008/02/02(土) 18:06:19
ご教示下さい。

環境:C++、VS.NET2003

1)Lib側が非MFC・App側がMFCの場合、Appに対してLibをリンクして利用出来るのでしょうか?

2)逆にLib側がMFC使用・App側が非MFCの場合、Appに対してLibをリンクして使用出来るの
でしょうか?

私の考えでは
 「LibがLibとして完結しているので、Lib側のMFC使用如何は問わない」
と思うのですが、如何なものなのでしょうか?

ITO 2008/02/02(土) 19:14:04
OSがビスタでなければ出来るはずです。
小規模なシステムで試してみるのがいいと思います。

.Lib素人 2008/02/03(日) 21:04:23
ITOさん、お返事ありがとうございます。

記載し忘れたOSですが、動作OSはWindowCEとなる予定です。
App作成OSはWindowsXPです。

Ban 2008/02/04(月) 04:43:33
>「LibがLibとして完結しているので、Lib側のMFC使用如何は問わない」

スタティックリンクライブラリは、単なる中間ファイル(.obj等)の格納庫です。
実行ファイルとリンクされるときに初めてアドレスなどが解決されるのが普通であり、
原理的に、スタティックリンクライブラリはモジュール的に完結していませんので、
リンク時の影響を受けます。(ダイナミックリンクライブラリは完結してます)

PC上でもmsvcrtとlibcmtの問題などが発生しますし、スタティックの場合、
基本的には「全員が同じライブラリを使う」ことが必要です。
# 一つでも別のものを使ってるものがあると、場合によっては破綻します。
# (一見、正常に動くケースもあります)

MFC側にあわせてあげるか、参照先にDLL版CRTを使うか、
DLL化を検討するか、などが必要かと思います。

maru 2008/02/04(月) 09:52:06
基本的にはBanさんが書いているとおり、
> スタティックリンクライブラリは、単なる中間ファイル(.obj等)の格納庫です。
> 実行ファイルとリンクされるときに初めてアドレスなどが解決されるのが普通であり、
> 原理的に、スタティックリンクライブラリはモジュール的に完結していませんので、
> リンク時の影響を受けます。(ダイナミックリンクライブラリは完結してます)
であり、
> 的には「全員が同じライブラリを使う」ことが必要です。
だが、必ずしも、
> MFC側にあわせてあげるか、参照先にDLL版CRTを使うか、
> DLL化を検討するか、などが必要かと思います。
とする必要は無いのでは?
この対策は、リンクでエラーが発生したときに考えれば良い。

もし、AppがMFCを使用していたら、そこで使用されるLibも必ずMFCを使用しなければ
ならない、なんてことはないでしょ。
Lib側で使用している関数とMFC内で使用している関数が競合(別バージョンの関数が
存在している)していなければ問題無いはず。で、各々の開発環境が同じであれば、
それらは同じ物なので、問題は発生しない。

.Lib素人 2008/02/04(月) 21:29:50
[[解決]]
Banさん、maruさん、お返事ありがとうございます。


>> MFC側にあわせてあげるか、参照先にDLL版CRTを使うか、
>> DLL化を検討するか、などが必要かと思います。
>とする必要は無いのでは?
>この対策は、リンクでエラーが発生したときに考えれば良い。
うーん…素人には判断出来かねますので、私には判りません。

お三方の返事を読み返した結果なのですが。。
LIB(今回作成する方)は、既にMFCを用いるAppとして存在していた物。
LIBに対応するに伴って、このApp内で使用していたMFCを放置していいものか否か…。
で、この質問となりました。

(LIB提供先の状況が不明な為、迂闊にMFC使用とするのもどうかと思いましたので…)
「非MFCに作り替えてLIB作成」の方向へ持って行く様にします。
この方が、汎用性があるかと思いますので。

皆様、ありがとうございました。

古いスレッドには追加発言できません。