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

OpenGLプログラムの他のPCでの実...
 
通知
すべてクリア

[解決済] OpenGLプログラムの他のPCでの実行ができない

固定ページ 1 / 3

lud
 lud
(@lud)
ゲスト
結合: 17年前
投稿: 15
Topic starter  

はじめまして、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でも動かすことができるようになるでしょうか?
すいませんが、よろしくお願いします。
また、質問で説明不足な点がございましたら、それも補足させていただきます。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

他のマシンでは何というエラーメッセージが出ますか?

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


返信引用
lud
 lud
(@lud)
ゲスト
結合: 17年前
投稿: 15
Topic starter  

>他のマシンでは何というエラーメッセージが出ますか?
アプリケーションの構成が正しくないというエラーがでます。

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

開発に利用しているマシンにインストールされている 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
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ちょっと補足。

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


返信引用
lud
 lud
(@lud)
ゲスト
結合: 17年前
投稿: 15
Topic starter  

シャノンさん、PATIOさんありがとうございます。

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

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

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

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

まず、デバッグのプログラムは基本的に配布できません。
何故かと言うとデバッグ版のランタイムが配布を禁止されているからです。

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

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

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

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


返信引用
lud
 lud
(@lud)
ゲスト
結合: 17年前
投稿: 15
Topic starter  

シャノンさん、PATIOさんありがとうございます。

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

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

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

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

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


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

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

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

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

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
 lud
(@lud)
ゲスト
結合: 17年前
投稿: 15
Topic starter  

maruさんありがとうございます。

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

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


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

失礼しました。

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

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

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


返信引用
lud
 lud
(@lud)
ゲスト
結合: 17年前
投稿: 15
Topic starter  

ありがとうございます。

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

答えは書いたつもりですが、読まれましたか?
呼んだけど意味がわからないところがあったのなら、そう言ってください。


返信引用
固定ページ 1 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました