C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C++のあるobjectを独立にする

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■84673 / inTopicNo.1)  C++のあるobjectを独立にする
  
□投稿者/ 干ばつ (1回)-(2017/07/26(Wed) 22:24:15)

分類:[C/C++] 

MS visual studio 20151でC++のソフトを試作中ですけれども、
例えば
引用返信 編集キー/
■84674 / inTopicNo.2)  Re[1]: C++のあるobjectを独立にする
□投稿者/ 干ばつ (2回)-(2017/07/26(Wed) 22:34:20)
【出直す】 
【前回、何かキーを押したらいきなり送信されてしまった!===そんなでたらめな、勝手な「自動化」機能は要らない!】

MS Visual studio 2015でC++のソフトを試作中ですけれども、
例えば, xxx.cppソースファイルをコンパイルして生成したxxx.objファイルを固定にしたいのです。
というのは、xxx.cppの内容の変更が許せないため、いったん無事コンパイルできたら、projectメンバーから外します。
このxxx.objはまるで*.libのように使いたいですが、どうすれば良いのでしょうか。
要はVS2015のどこにxxx.objを登録すれば良いのでしょうか。








引用返信 編集キー/
■84675 / inTopicNo.3)  Re[2]: C++のあるobjectを独立にする
□投稿者/ 774RR (546回)-(2017/07/27(Thu) 06:55:15)
いや普通に lib にすりゃいいぢゃん、とか思うのはオイラだけ?

ソースを編集しちゃいかん→ソースコード管理ツールで管理すりゃいいぢゃん、とか
オブジェクトファイルを追加したい→ソースコードが template だったらうまくないじゃん、とか
Release/Debug で内容違うよね、コンパイルオプション変えたくなったら毎回元ソースをコンパイルしなおすの?とか
そんなことを思ったりします。

追加ライブラリの項目に obj ファイルを指定してもうまく動いたはず。まずはそこから。
でも、オイラならソースコード管理ツールの側で管理するよう環境構築するでしょう。

引用返信 編集キー/
■84682 / inTopicNo.4)  Re[3]: C++のあるobjectを独立にする
□投稿者/ 干ばつ (3回)-(2017/07/27(Thu) 12:22:06)
No84675 (774RR さん) に返信
> いや普通に lib にすりゃいいぢゃん、とか思うのはオイラだけ?

objとlibとは本質的に一緒ではと思いますが、
若し違う処があれば是非教えてください

(個人的にlibはobjファイルの集まりに過ぎないと考えています)



> 追加ライブラリの項目に obj ファイルを指定してもうまく動いたはず。まずはそこから。

当初自分もそう思いましたが、Visusal sodiao 2015には適当な設定場所見つかりませんでした。
もう少し具体情報をいただければ幸せです。

どうぞ宜しくお願いします。
引用返信 編集キー/
■84683 / inTopicNo.5)  Re[4]: C++のあるobjectを独立にする
□投稿者/ 774RR (548回)-(2017/07/27(Thu) 13:24:50)
その追加 obj ファイルが1つっきりなら lib も obj も大差ないけど、複数の obj をリンクしたくなったら
追加する手間が1つでよい分 lib のほうが楽っしょ。

Express Edition だと「上級者設定」を有効にしないとその手の普段使わない設定は画面に出ないはず。
Community Edition だとどうだっけか?

今この瞬間には VS2015 が使えないので画面確認できない。今使える VS2008 だと、
左ペインのソリューション名の上で右クリック→プロパティ、で画面が出て
リンカ→入力→追加の依存ファイルに hoge.obj を記入
リンカ→全般→追加のライブラリディレクトリに hoge.obj を置いたディレクトリを記入
ないしは
リンカ→コマンドライン→追加のオプションにあれこれ手書き

Debug 構成と Release 構成でコンパイルオプションが異なる
x86 と x64 でコンパイルオプションが異なる
ことから hoge.obj は2つないしは4つ用意する必要があったりするのでかなり面倒な気がする。
プロジェクト側でコンパイルオプションを変更したくなったら hoge.obj も作り直しだし・・・

引用返信 編集キー/
■84684 / inTopicNo.6)  Re[5]: C++のあるobjectを独立にする
□投稿者/ とっちゃん (445回)-(2017/07/27(Thu) 13:54:50)
No84683 (774RR さん) に返信
> その追加 obj ファイルが1つっきりなら lib も obj も大差ないけど、複数の obj をリンクしたくなったら
> 追加する手間が1つでよい分 lib のほうが楽っしょ。
>
ですね。社外からもらったとかであっても、個人的には、LIBでほしいと思います。

> Express Edition だと「上級者設定」を有効にしないとその手の普段使わない設定は画面に出ないはず。
> Community Edition だとどうだっけか?
>
Community Edition はIDEの操作などはProと同じです。

> 今この瞬間には VS2015 が使えないので画面確認できない。今使える VS2008 だと、
> 左ペインのソリューション名の上で右クリック→プロパティ、で画面が出て
> リンカ→入力→追加の依存ファイルに hoge.obj を記入
> リンカ→全般→追加のライブラリディレクトリに hoge.obj を置いたディレクトリを記入
> ないしは
> リンカ→コマンドライン→追加のオプションにあれこれ手書き
>
ソリューションエクスプローラのツリーに直接追加でも参照できます(LIBも同様)。

obj などを、ソースファイルと同じフォルダまたは、中間ファイルの出力先(obj\Debugとかのフォルダ)
に配置しておくと、追加のディレクトリをセットしなくてもリンクできます。

引用返信 編集キー/
■84687 / inTopicNo.7)  Re[6]: C++のあるobjectを独立にする
□投稿者/ 干ばつ (4回)-(2017/07/27(Thu) 16:18:40)
皆さんありがとうございます


No84683 (774RR さん) に返信
>リンカ→入力→追加の依存ファイルに hoge.obj を記入
>リンカ→全般→追加のライブラリディレクトリに hoge.obj を置いたディレクトリを記入

上記のように設定しましたが、
下記のようなエラーが発生:

1>assortedProcess.cu.obj : fatal error LNK1318: 予期しない PDB エラー。OK (0) ''

何か足りない設定があるのでしょうか

引用返信 編集キー/
■84689 / inTopicNo.8)  Re[6]: C++のあるobjectを独立にする
□投稿者/ 774RR (549回)-(2017/07/27(Thu) 16:42:16)
追加したい obj/lib を、中間ファイルの出力先に置いちゃうと clean で消えちゃいませんか?
かといってソースファイルと同じディレクトリに置くと x86/x64 同時ビルドできないし難しいっす。

引用返信 編集キー/
■84690 / inTopicNo.9)  Re[7]: C++のあるobjectを独立にする
□投稿者/ とっちゃん (446回)-(2017/07/27(Thu) 16:55:14)
No84689 (774RR さん) に返信
> 追加したい obj/lib を、中間ファイルの出力先に置いちゃうと clean で消えちゃいませんか?
> かといってソースファイルと同じディレクトリに置くと x86/x64 同時ビルドできないし難しいっす。
>
あ、消えちゃうかもしれませんね。obj/* に直接配置はやばそうです。

ということで、もう一案。

Prj\
+-RefObj\x86\*.obj
+-RefObj\x64\*.obj

という感じで、サブフォルダに配置してしまいましょう。
これなら、独立するので、混ざらないし、Cleanで削除されてしまうこともないと思います。

引用返信 編集キー/
■84691 / inTopicNo.10)  Re[7]: C++のあるobjectを独立にする
□投稿者/ とっちゃん (447回)-(2017/07/27(Thu) 17:48:00)
No84687 (干ばつ さん) に返信
> 皆さんありがとうございます
>
>
> ■No84683 (774RR さん) に返信
> >リンカ→入力→追加の依存ファイルに hoge.obj を記入
> >リンカ→全般→追加のライブラリディレクトリに hoge.obj を置いたディレクトリを記入
>
> 上記のように設定しましたが、
> 下記のようなエラーが発生:
>
> 1>assortedProcess.cu.obj : fatal error LNK1318: 予期しない PDB エラー。OK (0) ''
>
PDBエラーなので、おそらく obj に紐づいたデバッグ情報が想定していない形であるということだと思います。
具体的には中間状態の pdb にアクセスできないとかじゃないかと思いますが、見たことがないのでわかりません。



> 何か足りない設定があるのでしょうか
>
上述したようにビルド時に付随的に作成されたファイル類にアクセスできないということだと思います。
.obj を生成するとき、合わせて、pdb などのデバッグ情報も作成されます。

pdb がらみなら、端的な対応としては、デバッグ情報をつけないことでいいと思いますが
それでいいかどうかについては、外部の人間にはわかりません(当該objのコード部分をデバッグする必要がないなら問題はないw)


デバッグはできる必要があるということなら、やっぱりちゃんとソースを組み入れてビルドするのが一番確実です。
意図しないソースの修正が行われるような状況にならないように体制を作るほうが後々(担当が変わった後)の
対応で困らないと思います。

それはできないということ出れば、当初からちらちらと出ているようにLIBファイルとして作り上げておくことかと。
こちらならpdbもちゃんと出力されるので、ワンセットにしてプロジェクトに持っておくとか
pdb の情報が埋め込まれるような形でLIBを生成するとか(別件なのでちゃんと自分で調べてくださいね)で
対応できると思います。

引用返信 編集キー/
■84693 / inTopicNo.11)  Re[8]: C++のあるobjectを独立にする
□投稿者/ 干ばつ (5回)-(2017/07/27(Thu) 20:39:02)
No84691 (とっちゃん さん) に返信

丁寧なご指導ありごうとうございます。

> PDBエラーなので、おそらく obj に紐づいたデバッグ情報が想定していない形であるということだと思います。
> 具体的には中間状態の pdb にアクセスできないとかじゃないかと思いますが、見たことがないのでわかりません。

release modeでコンパイルしたのですが、どうしてPDBエラーがでしょうか。
まったくデバッグ情報要らないので、どういう風にコンパイルすれば良いのでしょうか。

宜しくお願い致します
引用返信 編集キー/
■84696 / inTopicNo.12)  Re[9]: C++のあるobjectを独立にする
□投稿者/ 774RR (550回)-(2017/07/27(Thu) 21:56:01)
初見のエラーコードなので LNK1318 で検索したら
https://stackoverflow.com/questions/4256524/

キャッシュや一時ファイルの削除などの完全クリーンの後、デバッグシンボルサーバを停止させるため
windows 自体を再起動したらなぜかうまく動いた、みたいなことが書かれているっすね。
試してみる価値はあるかも。

あとは obj を lib 化してみてそれでもエラーが出るかどうかのテストとか
実は対象 obj とプロジェクト内他ファイルのコンパイルオプションが違っているとか
(特に /MD と /MT あたりが違うといろいろ厄介)
対象 obj をコンパイルしたコンパイラのバージョンが違うとか(他者提供だったりするとよくある)
そういうあたりで何か違いはないっすか?

ウチで実験に使った vs2008 ではそのようなエラーは出なかったのでなんとも。

引用返信 編集キー/
■84704 / inTopicNo.13)  Re[9]: C++のあるobjectを独立にする
□投稿者/ とっちゃん (448回)-(2017/07/28(Fri) 10:40:20)
No84693 (干ばつ さん) に返信
>>PDBエラーなので、おそらく obj に紐づいたデバッグ情報が想定していない形であるということだと思います。
>>具体的には中間状態の pdb にアクセスできないとかじゃないかと思いますが、見たことがないのでわかりません。
>
> release modeでコンパイルしたのですが、どうしてPDBエラーがでしょうか。
> まったくデバッグ情報要らないので、どういう風にコンパイルすれば良いのでしょうか。
>
リリースモードでビルドしてもデフォルトでは、デバッグ情報は追加されます。
デバッグ版と異なるのはエディットコンティニュー対応かどうかの違いくらいです。

コンパイルオプション(プロジェクトのプロパティからたどれる)にデバッグ情報についても設定があります。
まずはそこの設定を変更するとか、そういうところからですが

後付けでリンクしたい「.obj」ファイルをどうやって生成しているかによって設定方法などの状況も
大幅に変わるので何とも言えません。

引用返信 編集キー/
■84707 / inTopicNo.14)  Re[10]: C++のあるobjectを独立にする
□投稿者/ 干ばつ (6回)-(2017/07/28(Fri) 14:46:58)
とっちゃん さん、774RRさん

本当にありがとうございます!


774RRさんご指摘の通り
確かに、Releaseのファイルに ソースファイルと同名の*.cache ファイルと*.depsファイルが存在しております。
それを削除したら、うまくコンパイル(いや、リンク?)できました。

すごい!




解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ