ビルドが止まってしまう

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
usao
記事: 1887
登録日時: 11年前

ビルドが止まってしまう

#1

投稿記事 by usao » 10年前

環境:Win7 64bit, Visual Studio Professional 2012

Releaseでビルドすると出力ウィンドウに「コード生成しています。」という表示が出た段階から進まなくなってしまう現象に困っています.
IDEのメニューから ビルド→キャンセル を選べば
「Microsoft Incremental Linkerは動作を停止しました
この問題の解決策を確認しています...」
というダイアログが出て,しばらく放置するか キャンセルボタンを押せば ビルドの取り消しは可能です.

このプロジェクトはDebugビルドだと普通にexe生成まで終わり,動作も可能です.

クリーン,リビルド,プロジェクトを別に作り直してソースファイルを一式持っていく 等試しましたが同じ状況が起きています.


・どうしてこうなるのか
・どうすれば解決できるのか

等,御存じの方おられましたら,ご教授頂きたくお願い申し上げます.

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: ビルドが止まってしまう

#2

投稿記事 by h2so5 » 10年前

インクリメンタルリンクをOFFにしてみたらどうでしょうか。
http://msdn.microsoft.com/ja-jp/library/4khtbfyf.aspx

アバター
usao
記事: 1887
登録日時: 11年前

Re: ビルドが止まってしまう

#3

投稿記事 by usao » 10年前

>インクリメンタルリンクをOFFにしてみたらどうでしょうか。
設定を確認したところ
インクリメンタルリンクはOFFな設定になっていました.


…で,その後,一応ビルドできました.
リンカの進行状況を全て表示させてみたところ

コード:

1>  パス 1 を開始します。
1>  /DEFAULTLIB:msvcprt オプションで処理を行いました。
1>  /DEFAULTLIB:MSVCRT オプションで処理を行いました。
1>  /DEFAULTLIB:OLDNAMES オプションで処理を行いました。
1>  /DEFAULTLIB:glu32.lib オプションで処理を行いました。
1>  /DEFAULTLIB:opengl32.lib オプションで処理を行いました。
1>  
1>  ライブラリを検索しています。
…(すごいたくさんの libを検索中→見つかりました という表示)
1>  ライブラリの検索が終了しました。
1>  
1>  パス 1 が終了しました。
1>  
1>  コード生成しています。
と表示されて,ここで止まっているように見えていたのですが
その後 ずっと放置してみたところ, 再び

コード:

1>  コード生成が終了しました。
1>  
1>  ライブラリを検索しています。
...
というのが始まり,最終的に

コード:

1>  パス 2 が終了しました。
と表示され,正常終了しました.
ビルドログを見ると

コード:

2014/03/26 15:46:56 にビルドを開始しました。
...(略)
ビルドに成功しました。

経過時間 00:05:03.93
とのことで5分ほどかかっています.
debugならリンクは一瞬で終わるような規模のプログラムなのですが,何でこんなにも時間がかかるのでしょう?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ビルドが止まってしまう

#4

投稿記事 by softya(ソフト屋) » 10年前

リリースビルドの検索パスが多いんでしょうか。
そもそもパス1の段階で多すぎる気もしないでもないです。

[補足]検索パスを減らすか、パスの並びを変えれませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
usao
記事: 1887
登録日時: 11年前

Re: ビルドが止まってしまう

#5

投稿記事 by usao » 10年前

すみません.私,かなり無知であり 「パス1」とか「パス2」とかって何?状態です…

>[補足]検索パスを減らすか、パスの並びを変えれませんか?
これは 何を見ればよいのでしょう?
/LIBPATH のことなのでしょうか?(これは一個しか指定してないです)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ビルドが止まってしまう

#6

投稿記事 by softya(ソフト屋) » 10年前

あっ用語がごちゃごちゃですね。すいません。
パス1・2はコンパイラの段階(ステージ)のpassです。
検索パスはpathです。

と言うことで
リリースビルドの検索pathが多いんでしょうか。
そもそもpass1の段階で多すぎる気もしないでもないです。

[補足]検索pathを減らすか、検索pathの並びを変えれませんか?
と言う話をしています。

【補足】
この場合インクルードpathの問題だと思われます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
usao
記事: 1887
登録日時: 11年前

Re: ビルドが止まってしまう

#7

投稿記事 by usao » 10年前

情報ありがとうございます.
ご報告申し上げます.

>この場合インクルードpathの問題だと思われます。

使用しているライブラリのヘッダがある場所と,
プロジェクト直下を含む4カ所に散らばっているソース群のパスの
全5カ所のパスを以下のようにインクルードパスに指定していました.(指定順)
./ ← 直下
./A ← サブフォルダ1号
./B ← サブフォルダ2号
../C ← ちょっと別のところにあるソース群
C:\.../include ← ライブラリ用

これを,とりあえず ./A, ./B, ../C にあるソースファイル群について,全てプロジェクト直下にコピーしてきて
インクルードパスを
C:\.../include
だけにした状態でビルドしたところ,ビルド時間は 4分4秒 となり,約1分も短くなりました.

アバター
usao
記事: 1887
登録日時: 11年前

Re: ビルドが止まってしまう

#8

投稿記事 by usao » 10年前

調べていたところ,ほとんど同じソースを利用しているプロジェクトが存在していたので
Releaseビルド時間を調べたところ15秒ほどでした.

そこで,そのプロジェクトと今回のプロジェクトとの間で設定を見比べたところ,
今回問題となっている側では
「SDLチェック」というのが有効になっている点が異なっていました.
試しにそれを無効にしてリビルドしてみたところ,
前記ご指摘いただいたインクルードパスを減らすこと込みで
ビルド時間が約19.4秒に改善しました.(リンクの部分は体感では10秒くらいでしょうか)

なんだかよくわからないのですが,とりあえずこれが主たる原因だったように見えます.
本件の主題たるビルド時間については改善したように思えるので[解決]チェックをつけておきます.
オフトピック
「SDLチェック」なるものについては,少し検索してみた感じだと,まぁ取り払っても問題なさそうかな,と.
(C4996がいつの間にか警告じゃなくてエラーになってたのもこいつの仕業らしい)
[追記]
ソース群の配置を元の状態に戻して,SDLチェックを無効化した状態では ビルド時間は20.1秒となりました.
(SDLチェックが無ければインクルードパスの話は影響はそんなに無い?)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ビルドが止まってしまう

#9

投稿記事 by softya(ソフト屋) » 10年前

「/sdl (追加のセキュリティ チェックの有効化)」
http://msdn.microsoft.com/ja-jp/library/jj161081.aspx
これだけでそんなに増えると思いませんでした。2012以降に付いた機能の様ですね。
なにをやっているのだろう・・・。しかし、ややこしい名前である。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る