質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

4665閲覧

visual studioでサンプルプログラムをコンパイルするとエラーが出る

aiueoaiueoaiue

総合スコア94

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2018/04/07 15:57

編集2018/04/07 17:17

###実現したい事
このサイトのサンプルプログラムをで実行し、opencv_contribが使えるかどうかの確認をしたかったのですがエラーが出てしまいました。ソース自体は参考サイトからほぼコピペしたのでどこがいけないのか分かりません。解決策ご存知の方回答お願いします。
###ソースコード

c++

1// リンカーの入力を設定 2// デバッグとリリースで入力するファイルが異なるのでこのようにしています。 3#ifdef _DEBUG 4#define CV_EXT "d.lib" 5#else 6#define CV_EXT ".lib" 7#endif 8#pragma comment(lib, "opencv_core341" CV_EXT) // OpenCV3.3.0の場合は、"opencv_core330"に 9#pragma comment(lib, "opencv_highgui341" CV_EXT) // OpenCV3.3.0の場合は、"opencv_highgui330"に変更 10 11#include <opencv2/core/core.hpp> 12#include <opencv2/highgui/highgui.hpp> 13 14 15int main(int argc, char *argv[]) 16{ 17 // 初期化時に塗りつぶす 18 cv::Mat red_img(cv::Size(640, 480), CV_8UC3, cv::Scalar(0, 0, 255)); 19 cv::Mat white_img(cv::Size(640, 480), CV_8UC3, cv::Scalar::all(255)); 20 cv::Mat black_img = cv::Mat::zeros(cv::Size(640, 480), CV_8UC3); 21 22 // 初期化後に塗りつぶす 23 cv::Mat green_img = red_img.clone(); 24 green_img = cv::Scalar(0, 255, 0); 25 26 cv::namedWindow("red image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); 27 cv::namedWindow("white image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); 28 cv::namedWindow("black image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); 29 cv::namedWindow("green image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); 30 cv::imshow("red image", red_img); 31 cv::imshow("white image", white_img); 32 cv::imshow("black image", black_img); 33 cv::imshow("green image", green_img); 34 cv::waitKey(0); 35}

###エラーメッセージ

1>------ すべてのリビルド開始: プロジェクト:Test, 構成: Debug x64 ------ 1>stdafx.cpp 1>Test.c 1>Test.cpp 1>x64\Debug\Test.obj : warning LNK4042: オブジェクトの指定が重複しています。余分なものは無視されます。 1>LINK : fatal error LNK1104: ファイル 'opencv_core341d.lib' を開くことができません。 1>プロジェクト "Test.vcxproj" のビルドが終了しました -- 失敗。 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========

エラー
プリコンパイル解決後
エラー2
###補足情報
visual studio2017 community
OpenCV3.4.1
イメージ説明
イメージ説明

ara_ara👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

これ時々はまるやつです。
「プリコンパイル済みヘッダ-を作成」と指定している場合、#include "stdafx.h"が必要になるのですよ。
恐らくVC++の新規プロジェクトでプロジェクトを作ってから、OpenCVサンプル・ソースを置き換えたのだと思います。

対処としては、「プロコンパイル済みヘッダーを使用しない」にすることです。

プロジェクト(P) → 一番下にある<プロジェクト名>のプロパティで開くダイアログについて、
上の方の構成(C)すべての構成とし、左側ペインのC/C++を開き、プリコンパイル済みヘッダーをクリックします。
右側ペインのプロコンパイル済みヘッダープロコンパイル済みヘッダーを使用しないに設定してOKを押し、リビルドすれば治ると思います。


【追記について】
リンク先の

次に、リンカーの一般を開き、追加のライブラリディレクトリに[C:\opencv-3.2.0\build\install\x64\vc15\lib]を追加します。

は適切に行えていますか?

OpenCVのインストール先に合わせて修正が必要ですので、恐らく追加するべきフォルダはC:\opencv-3.4.1\build\install\x64\vc15\libではないかと思います。

投稿2018/04/07 16:35

編集2018/04/07 16:58
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aiueoaiueoaiue

2018/04/07 16:52

ありがとうございます。先ほどまでのエラーは仰る通りにして消えました。しかし代わりに別のエラーが出てしまいました。
aiueoaiueoaiue

2018/04/07 17:18

新たに追記した画像の通りに設定はちゃんとしたつもりなのですが、どこかおかしなところでもあるのでしょうか?
Chironian

2018/04/07 17:54

エラーを見る限りライブラリを見つけ損なっています。 こういう場合、たいていライブラリ・パス指定をミスしてます。 ですので、回答で記載した設定をミスしている可能性があります。 指定が正しい場合、指定したフォルダに指定したライブラリ・ファイルが無いということです。その原因としてはOpenCVのビルドに成功していない、3.2.0とは異なるフォルダにライブラリができている等が考えられます。
aiueoaiueoaiue

2018/04/08 02:33

CMAKEでビルドする際にopencv_worldにチェックを入れたのですべてのライブラリがopencv_world.libとしてまとまってしまっていると思うのですが、それは関係ないでしょうか?
aiueoaiueoaiue

2018/04/08 04:06

あれから試行錯誤してvisual studioのDebugをReleaseに変更し、 #pragma comment(lib, "opencv_core341" CV_EXT) // OpenCV3.3.0の場合は、"opencv_core330"に #pragma comment(lib, "opencv_highgui341" CV_EXT) // OpenCV3.3.0の場合は、"opencv_highgui330"に変更 の2行を #pragma comment(lib, "opencv_world341" CV_EXT) に変更することで無事実行できました。ありがとうございました。
Chironian

2018/04/08 04:08

https://teratail.com/questions/84006 を参考にされて下さい。 私が OpenCV をビルドしたのはopencv_worldがなかった大昔なので、このオプションについては良く把握していませんが、恐らく、opencv_worldにチェックをするとopencv_world*.libに統合されるということのようですね。
Chironian

2018/04/08 04:09

おっと、コメントが行き違いました。解決できたのであればよかったです。お疲れ様でした。
guest

0

エラーメッセージにある通り、stdafx.hをインクルードしてるからじゃないですか。
(参考サイトの方ではインクルードしていないですよ)

投稿2018/04/07 16:10

archiver

総合スコア1567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aiueoaiueoaiue

2018/04/07 16:15

元々は#include "stdafx.h"を書かずに実行してたんですが、その時にもうすでにこのエラーが出てたので新しくインクルードしてみたんです。ちなみにインクルード文を一行消してもう一度コンパイルしてみても、エラー内容は全く変わりませんでした。
archiver

2018/04/07 16:20

インクルードしていないのに「#include "stdafx.h"' をソースに追加しましたか?」のエラーメッセージが出てたってこと?なんかそれも変だなぁ。 ちなみに"stdafx.h"を<stdafx.h>にするとどうなります?
aiueoaiueoaiue

2018/04/07 16:27

はい、インクルードしていないのに「#include "stdafx.h"' をソースに追加しましたか?」のエラーメッセージが出てました。仰ったように変えてみると出力は変わりませんでしたが、エラーが少し増えました。追記しておきます。
archiver

2018/04/07 16:31

「不明なEOFが見つかりました」っていうのが気になるんだよなぁ。サンプルソースを作ったのはVisual Studio上でいいんだよね?
aiueoaiueoaiue

2018/04/07 16:35

はい、visual studio上でファイル→新規作成→プロジェクトでTestというプロジェクトを作成しました。
archiver

2018/04/07 17:04

リンクのwarnningメッセージの「オブジェクトの指定が重複しています。」だけど、もしかして、Test.cとTest.cppって同じ内容だったりしない?もしそうだとしたら、どちらか一方をプロジェクトから外せばいいと思う。
aiueoaiueoaiue

2018/04/07 17:15

Test.cには何の記述もしてません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問