VC++6.0上で、複数の関連するプロジェクトをすべてビルドしたときのリンクエラーで悩んでいます。
現在、ワークスペースには、以下の複数のプロジェクトがあります。
・Mainとなるプロジェクト
・上記のMainプロジェクトがDependしている、DLLのプロジェクト
問題は、DLLプロジェクトに新しいClassを追加したところ、単体でビルドすると成功するにもかかわらず、MainプロジェクトをActiveにしてリビルドしたときに、新しく追加したClassだけが下のように未解決にされてしまうということです。
”error LNK2001: 外部シンボルXXX(追加したクラスのコンストラクタ)は未解決です”
このClassはDLLの内部で使用されており、Mainプロジェクトから直接呼ばれるClassではありません。また、このClassの使用箇所をDLLのソースからコメントアウトすると、リンクエラーは解消されます。
VC++に不慣れかつ、他人の作ったプロジェクトなこともあり、現在の設定内容がいま一つわかっていないところがあります。問題はそのあたりだと思うのですが、はっきりしません・・・。
調べてわかっていることは、以下です。
・Mainプロジェクトから呼ばれるDLLのHeaderファイルにはパスが通っている。
・Mainプロジェクトから呼ばれるDLLのLibraryにはパスが通っている。また、#pragmaによりリンクされている。
・Mainプロジェクトから呼ばれるDLLにはパスが通っている。
ここを確認してみたらどうか?など、ヒントをもらえたらありがたいです。
よろしくお願いいたします。
No.1
- 回答日時:
自己解決結果を補足にどうぞ。
この回答への補足
> MrBan さん
ありがとうございます!
自己解決しました結果は以下です。
MainとなるプロジェクトのFileViewを確認したところ、
DLLの(問題のClassを呼び出してる)ソースが「Source Files」に含まれていることに気付きました。
そこで試しに、同「Source Files」を右クリックして、「Add Files to Folder」で、問題のClassを追加したところ、無事にビルドが通るようになりました。
というわけで、直接の問題は解決したのですが…
DLLのClassをわざわざMainプロジェクトのソース管理に加えないとビルドが通らないというのは、なんだか納得できません。
前任者が事情があってそのように設定しているのか、だとしたらVC++にどのような設定をしているのか?と疑問は残ってしまっています…。
No.2ベストアンサー
- 回答日時:
具体的な状況が分からないので推測ですが、
Mainから使用しておらずDLLからもexportしていないのに、
「Mainの方でそのヘッダを(間接的に?)includeしてしまっている」から、
Mainの方でもそのClassが定義されたことになってしまい、
そのの実体がないと言われてると言うことはありませんか。
ヘッダの依存関係がうまく整理できてないせいかな?という印象です。
無闇にincludeされてませんか。
本当にDLL内のみでしか使わず、Mainと無関係ならば、
Mainがincludeするヘッダファイルでは、そのClassが定義されないようにしてください。
代替策は、そのクラスもDLLからexportすることですが、
どちらが適しているかは実際のクラスの役割にもよるかと。
おっしゃる通り、MainがincludeしているDLLのヘッダに、errorが起きていたソースのヘッダがincludeされていました。
問題のヘッダのinclude箇所を削除するなど、依存関係をきれいにしたところ、無事にビルドが通って非常にすっきりしました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- その他(プログラミング・Web制作) Visual StudioでDjangoのプロジェクト配下のappを作成する方法 1 2022/05/01 03:47
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- 会社・職場 有給の取得を自粛した方がよいでしょうか。 先日、10月末に有給の取得を申請したのですが、次の日に同僚 7 2022/10/12 11:33
- 画像編集・動画編集・音楽編集 AfterEffectでのシャターの挙動がおかしい 1 2023/05/07 00:38
- PowerPoint(パワーポイント) 2016EXCEL→2016PowerPointにコピペすると図形がゆがみます 5 2022/03/31 11:44
- Ruby Ruby on Railsでサーバーを立ち上げるには 1 2022/08/28 16:16
- Visual Basic(VBA) VBプロジェクトでのフォルダ構成について 1 2023/07/22 03:49
- Java eclipse実行ができない 2 2022/07/27 04:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLL参照時に指定されたモジュー...
-
エラーについて
-
Visual Studio 続行するには何...
-
VC++6の「プロセスへアタッチ」...
-
Visual studio2017で、2回目の...
-
実行のパラメータについて
-
ブレークポイントは現在の設定...
-
学校PCで問題なくデバッグでき...
-
VB6で、FileSystemObject ...
-
visual studio2019でデバッグが...
-
vbprojファイルが開けません
-
ソリューションって何ですか
-
VBGファイルって?
-
SQLserverからのデータ取得
-
visual studio 2008 のデバッグ...
-
VB6のデバッガ?強制終了?につ...
-
vbpが開けない!!
-
VB6のデバッグ
-
ビルド時のエラー(書き込みで...
-
VSのデバッグ実行とデバッグな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
デバッグとビルドは何が違うの...
-
eclipseでプログラムが実行でき...
-
visual studio2019でデバッグが...
-
eclipseでデバックするとエラー...
-
デバッガでステップ実行してい...
-
Visual studio2017で、2回目の...
-
C言語での開発でエラーが出て困...
-
DLL参照時に指定されたモジュー...
-
Eclipseのブレークポイントが○...
-
VB.netを実行するとデバック プ...
-
visual studio 2008 のデバッグ...
-
ソリューションをまたがるデバ...
-
Visual Studio 2017 ビルドする...
-
Release版のexeが動きません
-
Visual C#で、usingが出来ない...
-
vb ver6 でformat文やTrim文の...
-
ブレークポイントは現在の設定...
-
VB6.0を使用しています
-
visual studio 2019 についての...
-
Visual Studio 2008 SP1について
おすすめ情報