OpenGLプログラムの他のPCでの実行ができない

[戻る]
lud 2008/04/21(月) 21:50:10
はじめまして、ludといいます。
Visual Studio 2005 C++で作成したOpenGLプログラムをVisual Studio 2005をインストー
ルしていないPCで動かしたいのですができません。OSはXP Home Edition SP2です。
プログラムはglut-3.7.6-binとSDL-devel-1.2.13-VC6のincludeファイルとlibファイルを
使用して作成しています

現在試している方法は、プロパティのコード生成のランタイムライブラリをマルチスレッ
ド(/MT)にしてビルドしようとしているのですが以下のようなエラーなどが出てビルドで
きません。
msvcrt.lib(MSVCR80.dll) : error LNK2005: _exit は既に LIBCMT.lib(crt0dat.obj) で
定義されています。

どのようにすれば、他のPCでも動かすことができるようになるでしょうか?
すいませんが、よろしくお願いします。
また、質問で説明不足な点がございましたら、それも補足させていただきます。

シャノン 2008/04/22(火) 10:10:03
他のマシンでは何というエラーメッセージが出ますか?

# 原因に心当たりはついているんだけど、敢えて最初はこの質問。
# 次からは最初にエラーメッセージを書いてもらえると、この一手間が省けます。

lud 2008/04/22(火) 12:36:53
>他のマシンでは何というエラーメッセージが出ますか?
アプリケーションの構成が正しくないというエラーがでます。


>次からは最初にエラーメッセージを書いてもらえると、この一手間が省けます。
ご指摘ありがとうございます。次からは気をつけます。

シャノン 2008/04/22(火) 13:14:39
開発に利用しているマシンにインストールされている VisualStudio は、2005 と 2005 
SP1 のどちらですか?
2005 であれば、これ
http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-
9C99-220B62A191EE&displaylang=ja
2005 SP1 であれば、これ
http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-
984D-389C36F85647&displaylang=ja
を、動かすマシンにあらかじめインストールしておく必要があります。

PATIO 2008/04/22(火) 18:41:55
ちょっと補足。

VisualStudio2005の開発したVC++のアプリの場合、
必要なランタイムライブラリがPCに最初から入っているケースは
VisualStudio2005が出た後に出来たOSだけだと思います。
また、SP1であれば、SP1が出る以前のOSには入っていないでしょう。
この為、シャノンさんが書かれているようにランタイムライブラリを
インストールしておく必要があります。
また、VisualStudio2005ではDLLヘルの問題を回避する為に
サイド・バイ・サイドという方式を採用していて
単にDLLを入れとけば良いと言う状態ではなくなっています。
この場合、MSが用意したインストールパッケージを使用する
必要があります。

lud 2008/04/22(火) 18:48:28
シャノンさん、PATIOさんありがとうございます。

>シャノンさん・PATIOさん
動かすPCにあらかじめインストールしておけば、デバッグの方式にかかわらず
動かすことができるのですか?

開発しているPCにインストールしておくものはなにかあるのでしょうか?

シャノン 2008/04/23(水) 15:41:48
デバッグの方式とは何ですか?
原則、開発マシン以外に配布するものはリリースビルドすべきです。

> 開発しているPCにインストールしておくものはなにかあるのでしょうか?

ありません。
VC++ ランタイムは VisualStudio と一緒にインストールされています。

PATIO 2008/04/23(水) 15:43:42
まず、デバッグのプログラムは基本的に配布できません。
何故かと言うとデバッグ版のランタイムが配布を禁止されているからです。

基本的に開発機であれば、開発環境もインストールしているはずなので
一般的には問題になりません。
他の開発環境で無いPCで動かすのであれば、リリース版のライブラリを
使った物にする必要があります。

> 現在試している方法は、プロパティのコード生成のランタイムライブラリをマルチスレッ
> ド(/MT)にしてビルドしようとしているのですが以下のようなエラーなどが出てビルドで
> きません。
> msvcrt.lib(MSVCR80.dll) : error LNK2005: _exit は既に LIBCMT.lib(crt0dat.obj) で
> 定義されています。

この部分が意味がわかりません。
他のPCで動かしたいからこのような設定にしているのでしょうか?
やりたい事に対してやっている事が見当はずれな気がします。

もし別の質問なのであれば、スレッドを分けて別に挙げた方がいいです。

lud 2008/04/23(水) 16:22:02
シャノンさん、PATIOさんありがとうございます。

>PATIOさん
>この部分が意味がわかりません。
>他のPCで動かしたいからこのような設定にしているのでしょうか?
>やりたい事に対してやっている事が見当はずれな気がします。

コード生成のランタイムライブラリをマルチスレッド(/MT)しデバックすれば、開発環境
のないPCでの実行が可能になる話を聞いたので試したら最初に明記されているエラーがで
ました。これは間違いなのでしょうか?


>シャノンさん
>デバッグの方式とは何ですか?
>原則、開発マシン以外に配布するものはリリースビルドすべきです。

デバッグの方式という言葉は間違っていました。すいません。
ランタイムライブラリの設定のことです。
開発マシン以外に配布し実行したいのですがその、リリースビルドがわかりません。
ただVC++でReleaseを選択しビルドするだけではできないので方法を教えてください。

基礎的なことばかりで申し訳ありません。

maru 2008/04/23(水) 17:01:13
> コード生成のランタイムライブラリをマルチスレッド(/MT)しデバックすれば、
『プロジェクトのプロパティ [構成プロパティ]-[全般]の[MFCの使用]を[共有DLLでMFCを
使う]を[スタティックライブラリでMFCを使用]に変更して、ビルドすれば、』
の間違いじゃないの?
確かにReleaseでこれを変更すると[コード生成]の[ランタイムライブラリ]が[マルチスレ
ッド(/MT)]に変わるけど。

> デバッグの方式という言葉は間違っていました。すいません。
間違っていたというより、デバッグという単語の意味わかってないんじゃないの?

> ただVC++でReleaseを選択しビルドするだけではできないので方法を教えてください。
上記の[MFCの使用]を[スタティックライブラリでMFCを使用]に変更してためしてください。
または[ランタイムライブラリ]を[マルチスレッド(/MT)]から[マルチスレッドDLL(/MD)]
に戻して、ビルドする。この場合、シャノンさんがあげているMFC再配布ファイルをイン
ストール先PCにインストールする。

シャノン 2008/04/23(水) 17:12:21
MFC を使ってるとは書いてないですねぇ。
もし使ってるなら、次からは最初に書いてくださいね。

で、そもそも、どうして VC++ 2005 なのに
> SDL-devel-1.2.13-VC6
なんですか?
SDL-devel-1.2.13-VC8 ってのもあるじゃん。

ただ、GLUT の方は VC++ 6.0 でコンパイルされているみたいですね。

基本、スタティックリンクにしたいなら、すべてのライブラリが使う CRT を統一しなけ
ればなりません。

> msvcrt.lib(MSVCR80.dll) : error LNK2005: _exit は既に LIBCMT.lib(crt0dat.obj) 
で定義されています。

というエラーの原因は、GLUT か SDL が VC++ 6.0 の CRT をリンクしていて、今回作っ
ているプログラムが VC++ 2005 の CRT をリンクしているためじゃないですかね。

それぞれのライブラリの DLL 版を使うか、ライブラリをソースコードから VC++ 2005 で
ビルドしなおすのが確実です。

lud 2008/04/23(水) 17:16:25
maruさんありがとうございます。

>上記の[MFCの使用]を[スタティックライブラリでMFCを使用]に変更してためしてください。
>または[ランタイムライブラリ]を[マルチスレッド(/MT)]から[マルチスレッドDLL(/MD)]
>に戻して、ビルドする。この場合、シャノンさんがあげているMFC再配布ファイルをイン
>ストール先PCにインストールする。

上記の方法でビルドできました。開発環境のないPCでの実行には、再配布ファイルをイン
ストールしなければ実行できないということでしょうか?

maru 2008/04/23(水) 17:22:24
失礼しました。

> MFC を使ってるとは書いてないですねぇ。
確かに...
ランタイムDLLの再配布ファイルを紹介しているようだったので、つい確認せず...

> プログラムはglut-3.7.6-binとSDL-devel-1.2.13-VC6のincludeファイルとlibファイルを
> 使用して作成しています
と書いてあるので、MFCではなくそれらのDLLが無いのかな、とも思ったんですけどね。

> それぞれのライブラリの DLL 版を使うか、ライブラリをソースコードから VC++ 2005 で
> ビルドしなおすのが確実です。
ということでしょうね。

lud 2008/04/23(水) 19:41:21
ありがとうございます。

開発環境のないPCで、VC++で作成したプログラムを動かすことは
そのPCになにもインストールしない状態ではできないのでしょうか?

シャノン 2008/04/24(木) 10:56:50
答えは書いたつもりですが、読まれましたか?
呼んだけど意味がわからないところがあったのなら、そう言ってください。

lud 2008/04/24(木) 13:55:48
シャノンさんすいません。飛ばしていて気づきませんでした。

>それぞれのライブラリの DLL 版を使うか、ライブラリをソースコードから VC++ 2005 で
>ビルドしなおすのが確実です。

この部分の意味がわからないので、方法がわかりません。
すいませんが、教えて下さい。

シャノン 2008/04/25(金) 09:55:21
VC++ 2005 SP1 はインストールしていますか?
もしまだなら、インストールしてください。
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs2005/sp1/
インストールにはすごく時間がかかるので、余裕があるときに。

で、スタティックリンクしていると思っていたのですが、GLUTもSDLもDLLで提供されてい
るのを使っていますか?
であれば、SDLをSDL-devel-1.2.13-VC8.zipを使うように変更してみてください。

案外これだけで問題解決したりして。

lud 2008/04/25(金) 18:59:12
>VC++ 2005 SP1 はインストールしていますか?
シャノンさん、ありがとうございます。
インストールを現在行っていてSDLも変更して試してみます。

>で、スタティックリンクしていると思っていたのですが、GLUTもSDLもDLLで提供されてい
>るのを使っていますか?

いろいろ基礎的なことばかりで申し訳ないんですけど、これはどういうことですか?
*.libなでではなく、*.dllのファイルを使うということですか?

シャノン 2008/04/25(金) 19:24:26
一旦、状況を整理しなおさせてください。

> glut-3.7.6-binとSDL-devel-1.2.13-VC6のincludeファイルとlibファイルを
> 使用して作成しています

とおっしゃっていますが、glut-3.7.6-bin とは、ここ
http://www.xmission.com/~nate/glut.html
の「glut-3.7.6-bin.zip (117 KB)」で、SDL-devel-1.2.13-VC6 とは、ここ
http://www.libsdl.org/download-1.2.php
の「SDL-devel-1.2.13-VC6.zip (Visual C++ 6.0)」で間違いありませんか?

どちらの zip ファイルも、展開すると dll が出てきますが、これは使っていないのです
か?
使っているかどうかわからなければ、dll を他の名前にリネームしてもプログラムが動く
かどうか確かめてください。
より確実な方法としては、Dependency Walker
http://www.dependencywalker.com/
を使って exe を開いてみて、左側のツリーに dll があるかどうか調べることができま
す。

まずはここまで。

PATIO 2008/04/28(月) 10:15:09
配布を考えるのであれば、基本的に自分がどんなライブラリを
どんな形で使用しているのかをきちんと把握しておく必要があります。
そして、使っているライブラリがDLLの場合、動作するにはそのDLLが
必要になりますからPCにはそのDLLファイルがインストールされている
必要があります。それらのDLLの内、配布先のOSにさいしょから入って
いるDLL以外は基本的に追加でインストールしないとDLL自体が存在し
ませんから動かないはずです。そういう意味では配布先のOSの種類や
サービスパックの当たり具合で入っているDLLの中身は変わりますから
確実に動かす為には必要なDLLを全てインストールできるように
インストールパッケージを提供する必要が有ります。

これが、スタティックリンクライブラリであれば、実行ファイルに
組み込まれた状態になっていますから別に配布する必要は無いわけです。
但し、スタティックリンクライブラリの場合、実行ファイルのサイズは
かなり大きくなります。

PATIO 2008/04/28(月) 10:19:26
この辺の話は、VC++2005だから違うと言うような話では有りません。
他の開発環境を使っていても同じ事です。

但し、VC++2005移行はサイド・バイ・サイドと言うDLLの管理方法を
使うようになった為、以前のように単純にDLLを同梱しているだけでは
うまく動かないようになっています。
実行ファイルと同じフォルダにあるDLLを使う場合はそれなりの設定が
必要になっています。逆に特に指定し無いのであれば、サイド・バイ・
サイドの管理下のDLLは専用のインストーラーでインストールする必要が
あると言う部分が今までと違っています。

シャノン 2008/04/28(月) 10:51:00
> 但し、VC++2005移行はサイド・バイ・サイドと言うDLLの管理方法を
> 使うようになった為、以前のように単純にDLLを同梱しているだけでは
> うまく動かないようになっています。
> 実行ファイルと同じフォルダにあるDLLを使う場合はそれなりの設定が
> 必要になっています。逆に特に指定し無いのであれば、サイド・バイ・
> サイドの管理下のDLLは専用のインストーラーでインストールする必要が
> あると言う部分が今までと違っています。

そんなことはありません。
2005 以降の VC++ ランタイムはそうなっていますが、すべての DLL がそうとは限りませ
ん。
単純に同じフォルダに放り込んでもうまくいく DLL もあります。

PATIO 2008/04/28(月) 14:16:20
一応、「サイド・バイ・サイドの管理下のDLLは」と
書いているのが、全てがそういうわけでは無いと言う
意味で書いたつもりだったんですが、
わかりにくかったですかねぇ。

lud 2008/04/28(月) 17:08:43
遅くなってしまってすいません。

>とおっしゃっていますが、glut-3.7.6-bin とは、ここ
>の「glut-3.7.6-bin.zip (117 KB)」で、SDL-devel-1.2.13-VC6 とは、ここ
>の「SDL-devel-1.2.13-VC6.zip (Visual C++ 6.0)」で間違いありませんか?

はい、そこからダウンロードし使用しています。現在はSP1をインストールしSDL-devel-
1.2.13-VC8を使用しています。


>より確実な方法としては、Dependency Walkerを使って exe を開いてみて、左側のツ
リーに >dll があるかどうか調べることができます。

確認してみたところ、ランタイムライブラリをマルチスレッドDLL(/MD)でビルドして作成
した実行ファイルでは大きな枝でKERNEL32.DLL、OPENGL32.DLL、GLU32.DLL、SDL.DLL、
MSBCR80.DLLの4つが存在していました。

シャノン 2008/04/30(水) 10:26:56
> わかりにくかったですかねぇ。

うにゅ、すいません。
SDL とかのサードパーティ DLL も面倒なインストールが必要と読んでしまいました。

シャノン 2008/04/30(水) 10:47:33
> 確認してみたところ、ランタイムライブラリをマルチスレッドDLL(/MD)でビルドして
> 作成した実行ファイルでは大きな枝でKERNEL32.DLL、OPENGL32.DLL、GLU32.DLL、
> SDL.DLL、MSBCR80.DLLの4つが存在していました。

たぶん最後のは MSVCR80.DLL の間違いだと思いますが。
KERNEL32.DLL と OPENGL32.DLL は Windows が最初から持っているシステム DLL です。
これらはインストール先の環境に最初からあるはずです。
GLU32.DLL と SDL.DLL は今回使用したライブラリです。
これはインストール先に配布しなければなりません(ライセンス要確認)。おそらく、
exe と同じフォルダにおいておけば動くでしょう。
MSVCR80.DLL が VC++ のランタイムライブラリです。
これは前述(2008/04/22(火) 13:14:39)のインストーラを使って、あらかじめインスト
ール先にインストールしておく必要があります。

で、最後の MSVCR80.DLL を、別途インストールさせること無く済ませたいという場合
は、ランタイムライブラリを「マルチスレッド(/MT)」にすれば(exe ファイルのサイ
ズはかなり大きくなるでしょうが)可能だと思います。

> *.libなでではなく、*.dllのファイルを使うということですか?

DLL の使い方には2通りあります。
1つは、LoadLibrary を使う方法。この場合、DLL だけあればいいです。が、面倒です。
もう1つは、インポートライブラリを使う方法。これは楽ですが、*.dll と *.lib が両
方必要です。

紛らわしいのですが、*.lib はインポートライブラリとスタティックライブラリの2種類
があります。
インポートライブラリは DLL と併用するためのもので、コードの実体は DLL にありま
す。
スタティックライブラリは LIB だけで使えて、コードの実体も LIB の中にあります。
スタティックライブラリを使うと、DLL が要りません。が、EXE のサイズが増大します。

Unix 由来のライブラリには、DLL と LIB の両形態で提供しているものが多いと思いま
す。
もし今回、DLL を使うのを嫌って LIB(スタティックライブラリ)を使おうとしているな
ら…という想定の元でやりとりしてきたわけですが、SDL も GLUT も DLL と LIB(イン
ポートライブラリ)を使っているということが判明しました。

で、改めてお聞きしますが、ランタイムライブラリを /MT にした場合、今でも

> msvcrt.lib(MSVCR80.dll) : error LNK2005: _exit は既に LIBCMT.lib(crt0dat.obj) 
> で定義されています。

というエラーが出ますか?

もし出る場合、VC++ で新しいプロジェクトを作って、コードには空っぽの main 関数だ
け書いて、ランタイムライブラリを /MT にして、
・SDL だけリンクした場合
・GLUT だけリンクした場合
でもエラーが出るかどうか教えてください。

lud 2008/04/30(水) 16:16:28
ありがとうございます。試してみます。

>たぶん最後のは MSVCR80.DLL の間違いだと思いますが。
すいません。間違えていました。



実行先にPCではVCをインストールしておらず、なにもインストールできないので、で
きれば、スタティックライブラリでビルドしたいと考えています。

シャノン 2008/04/30(水) 17:52:11
今作っているプログラムは、インストーラが無く、圧縮ファイルを展開するだけで使用可
能、というような形態のものだと思います。
そこで展開したフォルダの中に、GLUT や SDL の DLL が入っていれば動く、それらの 
DLL は圧縮ファイルに入っており、ユーザーが別途入れる必要は無い、というのでは NG 
ですか?
圧縮ファイルを展開するだけの作業を「インストールする」と呼ばないなら、同じように
「GLUT や SDL の DLL をインストールする」作業も無いと言えるでしょう。
それとも、EXE ファイルひとつだけで動かなければなりませんか?

EXE ファイルひとつだけで動かす方法もあります。
が、面倒ですよ。GLUT や SDL については DLL を使うほうが、開発はずっと楽だと思い
ます。

それはそれとして。
「配布先には何もインストールできない」という制限はどこから来るのでしょうか?
そのような制約は不幸しか呼びません。
できるなら、「あらかじめ VC++ ランタイムをインストールしておく」という選択肢が許
容されるように変えていくのが、今後のことも考えるとよりよい道だと思います。

lud 2008/04/30(水) 18:08:50
>そこで展開したフォルダの中に、GLUT や SDL の DLL が入っていれば動く、それらの 
>DLL は圧縮ファイルに入っており、ユーザーが別途入れる必要は無い、というのでは NG 
>ですか?

それがベストだと考えています。


>できるなら、「あらかじめ VC++ ランタイムをインストールしておく」という選択肢が許
>容されるように変えていくのが、今後のことも考えるとよりよい道だと思います。

上の方に書いてあるアドレスのインストーラのことですよね?変えていきたいと思いま
す。しかし、一番いいのは配布ファイルだけで事足りるようにビルドすることだと考えて
います。

シャノン 2008/04/30(水) 18:21:09
> それがベストだと考えています。

であれば、

> 実行先にPCではVCをインストールしておらず、なにもインストールできないので、
> できれば、スタティックライブラリでビルドしたいと考えています。

スタティックライブラリにする必要はありませんよね。

> EXE ファイルひとつだけで動かす方法もあります。
> が、面倒ですよ。GLUT や SDL については DLL を使うほうが、開発はずっと
> 楽だと思います。

これを実現するためにはスタティックライブラリにしなければならないのですが。

lud 2008/04/30(水) 18:30:53
> EXE ファイルひとつだけで動かす方法もあります。
> が、面倒ですよ。GLUT や SDL については DLL を使うほうが、開発はずっと
> 楽だと思います。

開発が楽な方がうれしいので、EXEファイル一つにする方法はやめておきます。

> msvcrt.lib(MSVCR80.dll) : error LNK2005: _exit は既に LIBCMT.lib(crt0dat.obj) 
> で定義されています。
>というエラーが出ますか?

同じエラーがでました。
>もし出る場合、VC++ で新しいプロジェクトを作って、コードには空っぽの main 関数だ
>け書いて、ランタイムライブラリを /MT にして、
>・SDL だけリンクした場合
>・GLUT だけリンクした場合
>でもエラーが出るかどうか教えてください。
試せるのは明日になります。すいません。

色々ご迷惑おかけしますが、よろしくお願いします。

lud 2008/05/01(木) 11:06:47
>SDLだけリンクした場合のソース
#include <SDL.h>
#pragma comment(lib, "sdl.lib")
#pragma comment(lib, "sdlmain.lib") 
int main( int argc, char **argv ){
   return 0;
}
以下のエラーが出ました。
error LNK2005: _isspace は既に LIBCMT.lib(_ctype.obj) で定義されています。
msvcrt.lib    
error LNK2005: _exit は既に LIBCMT.lib(crt0dat.obj) で定義されています。    msvcrt.lib
warning LNK4098: defaultlib 'msvcrt.lib' は他のライブラリの使用と競合していま
す。/NODEFAULTLIB:library を使用してください。    LIBCMT.lib    


>GLUTだけリンクした場合のソース
#include <stdio.h>
#include<GL/glut.h>
#pragma comment(lib, "opengl32.lib")  
#pragma comment(lib, "glu32.lib")
int main(void){
   return 0;
}

こちらはエラーが出ずビルドできました。

シャノン 2008/05/01(木) 13:27:49
うーむ…

どうも、SDL-devel-1.2.13-VC8 が怪しいです。
SDL.DLL を Dependency Walker で開くと、MSVCRT.DLL にリンクしているのがわかりま
す。
が、これが VC++ 2005 SP1 でビルドされたものであれば、MSVCR80.DLL にリンクしてい
なければならないはずです。
どうも、名前に反して、VC++ 2005 でビルドされたものではないのではないか、という気
がしてきました。

おそらく、SDLmain.lib がリンクしている CRT が、VC++ 2005 SP1 のものではないので
しょう。
そのため、その CRT と、今作っているプログラムの CRT に不一致が生じていることが、
LNK2005 の原因と思われます。

対策は…SDL をソースコードからビルドし直すしかないですかね。
SDL-1.2.13.zip をダウンロードして展開し、その中の VisualC.zip を展開し、SDL.sln 
をビルドするのですが、どうも DirectX SDK が必要なようです。面倒ですね。
DirectX SDK はここから入手できます。
http://www.microsoft.com/japan/msdn/directx/downloads.aspx
最新の March 2008 でビルドできることを確認しました。

また、ランタイムライブラリを /MT にするためには、SDL および SDLmain も /MT にし
なければなりません。
デフォルトでは /MD になっているので、ビルドする際に変更してください。

シャノン 2008/05/01(木) 13:53:01
SDL のビルド手順です。

1:DirectX SDK をインストールする。
標準のインストールパスは
 C:\Program Files\Microsoft DirectX SDK (March 2008)\
です。変更した場合は、インストール先を控えておきましょう。
なお、これは配布先のマシンにインストールする必要はありません。

2:SDL のソースコードを展開する。
SDL-1.2.13.zip を展開し、その中の VisualC.zip も展開します。
この時、展開に使うソフトの設定によっては、VisualC ディレクトリが2重にできてしま
うことがあります。
ソフトの「書庫名でディレクトリを作る」ような機能は OFF にしてください。
もし、2重にできてしまったら、正しい位置に移動してください。

SDL 展開ディレクトリ
├build-scripts
├docs
├include
├src
├test
├VisualC
|├SDL
|├SDLmain
|├tests
|├SDL.sln
|└SDL.dsw
├VisualC.zip
└README等、その他のファイル

となっているのが正解です。

3:SDL.sln をビルド
VisualC ディレクトリの中の SDL.sln を開きます。
ランタイムライブラリを /MT にしたいなら、SDL、SDLmain の両プロジェクトのランタイ
ムライブラリも /MT にします。
デバッグ構成では /MTd、リリース構成では /MT にするのがよいでしょう(今作っている
プログラムも同じにする)。
また、SDL プロジェクトのプロパティを開き、
・C/C++ → 全般 → 追加のインクルード ディレクトリに、DirectX SDK の Include デ
ィレクトリを
・リンカ → 全般 → 追加のライブラリ ディレクトリに、DirectX SDK Lib ディレクト
リを
それぞれ追加します。
で、ビルドすれば、SDL.dll、SDL.lib、SDLmain.lib ができるはずです。

あとは、ここでできた dll と lib を使ってプログラムをビルドすれば、たぶんエラーは
解消します。

lud 2008/05/01(木) 14:39:53
>また、ランタイムライブラリを /MT にするためには、SDL および SDLmain も /MT にし
>なければなりません。
>デフォルトでは /MD になっているので、ビルドする際に変更してください。

これはどうやってやるんですか?VCの設定を変更すればいいんですか?

シャノン 2008/05/01(木) 14:44:43
ご自分で作られているプロジェクトの設定を変更する方法はわかりますよね?
SDL.sln を開いて、それぞれのプロジェクトの設定を同じように変更すればよいのです。

lud 2008/05/02(金) 18:35:09
[[解決]]
>それぞれ追加します。
>で、ビルドすれば、SDL.dll、SDL.lib、SDLmain.lib ができるはずです。

この3つを使用してビルドしたEXEファイルは開発環境のないPCでも実行できました。
いろいろと丁寧にご指導頂いて本当にありがとうございました。
質問させて頂く機会が、もしまたありましたら、
その際もお手数ですがよろしくお願いします。
本当にありがとうございました。

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