プロが教えるわが家の防犯対策術!

VC++ .NET 2005 ExpressでApache2.0.59(ssl)をコンパイルし、コンパイル(コマンドラインからです。)まではうまくいったのですが、実行させようとすると、「MSVCR80.dllが見つからなかったため、このアプリケーションを開始できませんでした。...」というエラーが出て実行できません。
別のマシンであれば、Microsoft Visual C++ 2005 再頒布可能パッケージ を入れる必要がある(今までのように単なるコピーではだめ。)ことは分かったのですが、そもそもVC++入っているし、再頒布可能パッケージもインストールしてみたのですが、インストールせずに終了してしまいます。(多分既にランタイムがあるからだと思ってます。)

どなたか原因が分かる方がいれば、アドバイスを下さい。

A 回答 (2件)

VC++2005でCRTをダイナミックリンクすると、実行するためにはマニフェストが必要になります。



解決策としては

コンパイルして.exeが生成されたフォルダ(インストール先ではありません)に、exeのファイル名.manifestというファイルがあるので、これをインストール先の.exeのあるフォルダにコピーする。

コマンドライン等から.exeが生成されたフォルダで
mt.exe -manifest exeのファイル名.manifest -outputresource:exeのファイル名;1
のようにして、.exeにマニフェストを埋め込んで、その.exeをインストール先の.exeに上書きコピーする。

CRTをスタティックリンクする。

のどれかですね。
    • good
    • 0
この回答へのお礼

ありがとうございます。manifestをexeのあるフォルダにコピーしたところ、うまくいきました。

manifestファイルですが、exe用のやつ以外にも、soファイル用のもありましたが、これもコピーする必要があるのでしょうか。(結構数が多いので。)
軽く動かした限りだと、必要なさそうな気がするのですが。

お礼日時:2006/10/09 13:50

ちょとわかりませんね…


ですが、.exeと.soの要求してるCRTのバージョンが同じであれば問題ないと思います。

.exeと.dll(.so)の要求するCRTのバージョンが違うとか、
.exeのCRTがスタティックリンクでマニフェストがないとか、
みたいな場合が想定される場合にマニフェストを用意する必要があると思います。

ちなみに、.soの場合は、LoadLibraryで読み込まれる.dllなので、
コピーではダメで、mt.exeで埋め込む必要があります。

参考URL:http://msdn2.microsoft.com/ja-JP/library/ms23534 …
    • good
    • 0
この回答へのお礼

ありがとうございます。参考になりました。soファイルに関しては、実際に動かしてみて確認します。

お礼日時:2006/10/12 00:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!