リンクエラー – プログラミング – Home

通知
すべてクリア

[解決済] リンクエラー


gg
 gg
(@gg)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

いつもお世話になっています。ggです。

DLL作成中ですが、
なんか原因で、リンク中以下のエラーメッセージボックスがでました。

エラーメッセージボックスのタイトルは
ADebug.exe -コンポーネットが見つかりません

ボックス内の内容は
DrawPolygonDLL.dllが見つからなかったため、このアプリケーションを開始
できませんでした。アプリケーションをインストールし直すとこの問題は解決
される場合があります。
OKボタンを付いています

前は、リンクがうまくできたのですが、
調べたら、DrawPolygonDLL.dllは¥Aの下にあるのです。

どう解決するのでしょうか。

よろしくお願いします。

環境:.Net MFC使用 WinXP


引用未解決
トピックタグ
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> なんか原因で、リンク中以下のエラーメッセージボックスがでました。
メッセージをみると、これはデバッグを開始した時のメッセージであり、リンクは終了している
ようですが?

上記メッセージが出るのは、exeを起動したときに、そのexeからみてdllを探し出せていないよ
うです。dllを作成したexeを同じ場所に作成するように設定すれば解決するでしょう。


返信引用
gg
 gg
(@gg)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

maruさん、
ご返事ありがとう。

ご指摘通り、うまくできました。

ちなみに、DLL*.Lib と DLL*.dllを自動的に
Copyの設定どこにあるのでしょうか。
いま、いちいち手動でコピーしているのですが、
結構めんどくさい。

よろしくお願いします。


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

> ちなみに、DLL*.Lib と DLL*.dllを自動的に
> Copyの設定どこにあるのでしょうか。
ソリューションエクスプローラでプロジェクト右クリック、[プロパティ]-[構成プロパティ]-
[ビルドイベント]-[ビルド後のイベント]の[コマンドライン]にcopy $(TargetPath) 転送
先を入力。

# DLLとEXE(テスト用?)を同時に作成しているならば、各々のプロジェクトを同一ソリュー
ションで作成しておけば、同一の$(TargetDirectory)に作成されるはず。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

VCのバージョンにもよると思うが。
「ビルド後のイベント」について設定すると良いでしょう。


返信引用
gg
 gg
(@gg)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

maru さん、たいちうさん
ご返事ありがとう。

># DLLとEXE(テスト用?)を同時に作成しているならば、各々のプロジェクトを同一ソ
>リュー
>ションで作成しておけば、同一の$(TargetDirectory)に作成されるはず。

はい、BDLLとEXEは同一ソリューションで作成しています、

copy \DrawPolygonDLL\Debug\*.dll \Exe\.
あるいは、
copy DrawPolygonDLL\Debug\DrawPolygonDLL.dll Exe\
結局
DrawPolygonDLL.dllは Exe¥にコピーされなかった。

copy コマンドの使い方が間違っているのでしょうか。

よろしくお願いします。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662

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

> 結局
> DrawPolygonDLL.dllは Exe¥にコピーされなかった。
ビルドログはどう出力されていましたか? コピー失敗?

相対パスの指定方法が違っているのかな?
ファイル名に相対パスを使用する場合、カレントがどこにいるかを考えないと正しくコピー出来
ません。

で、カレントどこになっているかを考えなくて済むようにマクロが定義されています。
コマンドラインを入力するエディットボックスの右端に...ボタンがあるので、そのダイアログ
でマクロボタンをおして見てください。それらのマクロの組み合わせを使えば正しくコピー出来
るでしょう。

# 前回書いた$(TargetDirectory)は$(TargetDir)の間違い。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

上手くいかないときは
echo on
echo $(TargetDirectory)
copy \DrawPolygonDLL\Debug\*.dll \Exe\.
とかやって試行錯誤したことある。

俺も各々のプロジェクトを同一ソリューションが楽だと思う。
#でもVC6は駄目だったような。


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

ごちゃごちゃ悩むならバッチファイルのひとつでも書いて、
実行すればいい。

ったく、リンクエラー如き自身で直せないでどうするよ。


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

今回の話は実際にはリンクエラーではなくて実行時のエラーなわけですが、
実際のリンクエラーならリンカーが何をしていて出てきたエラーの原因は
何かというのを一つ一つ覚えていかないと難しいでしょうねぇ。
自己解決ができるが一番早いし、効率がいいのは当たり前として
最初からこれができる人はほとんどいませんし、
この辺がわからないというのは、みんな通る道だと思います。
大事なことは自分の失敗から学んで次に生かすことでしょう。
だから同じような質問を繰り返さなくてもよいように
毎回しっかりと理解するようにするとよいと思います。

あと、Dllに関してはOS周りの知識も多少必要かなと思います。
Windowsで実行ファイルが動く時に必要なDllをどのように探して
読み込んでいるのかとそういう部分が理解できるようになると
今回のような問題も自分で解決できるようになりますよ。

ソフトを組むというのは、プログラミング言語の知識だけでは
全然足りなくて、それが動いているOSの知識とか実際には
幅広い知識が必要になります。
いっぺんに勉強することは難しいと思いますが、
失敗したときを良い機会だと思って一つ一つ覚えていくと
良いと思います。


返信引用
gg
 gg
(@gg)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

たいちうさん、maruさん、wclrp ( 'o')さん、PATIO さん
ご返事ありがとう。
 
「ビルド後のイベント」
copy DrawPolygonDLL\Debug\*.dll $(TargetDir)
成功しました。

同じく
「ビルド前のイベント」
copy DrawPolygonDLL\Debug\*.Lib $(OutDir)
も成功しました。

結構楽にしました。
ほんとに、ありがとうございました。

>大事なことは自分の失敗から学んで次に生かすことでしょう。
>だから同じような質問を繰り返さなくてもよいように
>毎回しっかりと理解するようにするとよいと思います。
そうですね、わかりました。

みなさん、ありがとうございました。


返信引用
gg
 gg
(@gg)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

解決のチェックを追加しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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