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

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

ただいまの
回答率

90.48%

  • C

    3835questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • OpenCV

    1170questions

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

  • GCC

    143questions

    GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

  • MinGW

    52questions

    MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

opencvでgcc用のライブラリを作りたい。

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,620

carnage0216

score 122

環境
Windows10 64bit
gcc(mingw)
opencv3.4.0

opencvのライブラリはvsようであるためgccでは使えません。
なので、opencvのライブラリをgccで使えるようにするために、ライブラリの元となるソースコードcoreのソースコードの一つalgorithm.cppをgccでコンパイルしようとしたのですが、途中からgithubに載っていないヘッダファイルが出現したため困っています。

algorithm.cppの中身です。

/*M///////////////////////////////////////////////////////////////////////////////////////
//
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
//  By downloading, copying, installing or using the software you agree to this license.
//  If you do not agree to this license, do not download, install,
//  copy or use the software.
//
//
//                           License Agreement
//                For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
//   * Redistribution's of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//
//   * Redistribution's in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//
//   * The name of the copyright holders may not be used to endorse or promote products
//     derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/

#include "precomp.hpp"

namespace cv
{

Algorithm::Algorithm()
{
    CV_TRACE_FUNCTION();
}

Algorithm::~Algorithm()
{
    CV_TRACE_FUNCTION();
}

void Algorithm::write(const Ptr<FileStorage>& fs, const String& name) const
{
    CV_TRACE_FUNCTION();
    if(name.empty())
    {
        write(*fs);
        return;
    }
    *fs << name << "{";
    write(*fs);
    *fs << "}";
}

void Algorithm::save(const String& filename) const
{
    CV_TRACE_FUNCTION();
    FileStorage fs(filename, FileStorage::WRITE);
    fs << getDefaultName() << "{";
    write(fs);
    fs << "}";
}

String Algorithm::getDefaultName() const
{
    CV_TRACE_FUNCTION();
    return String("my_object");
}

void Algorithm::writeFormat(FileStorage& fs) const
{
    CV_TRACE_FUNCTION();
    fs << "format" << (int)3;
}

}

/* End of file. */> 引用テキスト

こちらがエラーコードです。

0\modules\core\src\algorithm.cpp
In file included from D:\opencv-3.4.0\modules\core\src\precomp.hpp:55:0,
                 from D:\opencv-3.4.0\modules\core\src\algorithm.cpp:43:
c:\mingw\include\opencv2\core\private.hpp:48:4: error: #error this is a private header which should not be used from outside of the OpenCV library
 #  error this is a private header which should not be used from outside of the OpenCV library
    ^~~~~
In file included from c:\mingw\include\iw++\iw_core.hpp:27:0,
                 from c:\mingw\include\iw++\iw.hpp:27,
                 from c:\mingw\include\opencv2\core\private.hpp:241,
                 from D:\opencv-3.4.0\modules\core\src\precomp.hpp:55,
                 from D:\opencv-3.4.0\modules\core\src\algorithm.cpp:43:
c:\mingw\include\iw\iw_core.h:32:23: fatal error: ippdefs_l.h: No such file or directory
 #include "ippdefs_l.h"
                       ^
compilation terminated
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2018/04/13 10:38

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • YomogiKOBO

    2018/04/13 12:33

    関連する質問として追記。https://teratail.com/questions/121654

    キャンセル

回答 4

+3

msys2を利用しましょう。

https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-opencv

にてPKGBUILDが配られているのでこれを利用しない手はないです。

msys2をインストールしたら、
MINGW64を開いて、

pacman -S base-devel git mingw-w64-x86_64-toolchain cmake
git clone https://github.com/Alexpux/MINGW-packages.git --depth=1
cd MINGW-packages/mingw-w64-opencv
makepkg -csi

でひたすらyして行けば依存ライブラリを勝手に入れてくれつつ、ビルドしてパッケージ化してインストールまでしてくれます。


ビルドすることにこだわらなければ、

$pacman -Ss opencv
mingw32/mingw-w64-i686-opencv 3.4.0-1
    Open Source Computer Vision Library (mingw-w64)
mingw64/mingw-w64-x86_64-opencv 3.4.0-1
    Open Source Computer Vision Library (mingw-w64)

prebuild binary packageが配布されているので

$ pacman -S mingw-w64-x86_64-opencv

とすれば十分です。PKGBUILDをmakepkgでビルドする方法を紹介したのは、あくまでPKGBUILDをいじってとくにffmpegのビルドをカスタマイズしたいとか(ライセンス的に配布バイナリには含められない有用なライブラリとかあるので)そういう要求かなとおもっての回答です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/13 06:05

    ついさっき手元でビルドできることを確認しました。大量にwarningが出るのはご愛嬌。

    キャンセル

+3

MSYS2にはGCC用のOpenCVバイナリが用意されていますので、目的がMinGW-w64 GCCでOpenCVを使いたいだけであればバイナリを使用するのが一番早いと思います。

以下、手順です。なお、MSYS2が意図しないところにインストールされないようにChocolateyを使っています。(MSYS2を既にインストールしている場合はアンインストールしておいてください。)

インストール

  1. Chocolatey Installationのページにある方法でChocolateyをインストールします。(英語が読めない場合は、この後の説明もわからない所が出てきますので、諦めて下さい。)
  2. 管理者としてコマンドプロンプトまたはPowerShellを開きます。
  3. 次のコマンドを実行し、MSYS2をインストールします。
    cinst -y msys2
  4. "C:\tools\msys64\mingw64.exe"を実行し、MINGW64環境のMSYS2を起動します。
  5. 次のコマンドでGCCやビルド関係を入れます。
    pacman -S mingw-w64-x86_64-toolchain
  6. 次のコマンドでOpenCVを入れます。
    pacman -S mingw-w64-x86_64-opencv

テスト

  1. "C:\tools\msys64\mingw64.exe"を実行し、MINGW64環境のMSYS2を起動します。
  2. 適当なエディタでOpenCV: contours2.cppにサンプルをコピーし、"contours2.cpp"という名前で保存します。
  3. 次のコマンドでビルド(コンパイル)します。
    g++ contours2.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui
  4. "a.exe"が作られてるはずですので、実行します。
    ./a.exe
  5. サンプルのサイトにあったようなウィンドウが表示されればOKです。

その他

配付バイナリはCUDA対応はたぶんなってないとおもいます。対応したい場合は、yumetodoさんの回答を参考にして自分でコンパイルしてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/13 09:13

    詳しい解説、どうもありがとうございます。素直に使わせていただきます。
    あの、VSにもコマンドプロンプトが存在しますが、GCCにもコマンドプロンプトが存在します。
    VSのコマンドプロンプトのみを使う場合はGCCをコマンドプロンプトで使うのとほとんど変わりまないように思えます。もちろんコマンドはVSとGCCでは異なります。それ以外で何か大きな違いはあるのでしょうか?

    キャンセル

  • 2018/04/13 10:03

    あの、実装とは別にあっているかの確認としてお尋ねしたいのですが、opencvはvsでしかコンパイル出来ません。gccで使うには以下の手順が必要に思えます。
    vsでコンパイルした実行ファイルをobjdumpなど用いて逆アセンブルすれば、そのアセンブリプログラムがgcc専用のプログラム、すなわち、gccでアセンブラ(コンパイル)できるプログラムなのでしょうか?
    仮にそうだとしても得られたアセンブリプログラムを解読するのは骨が折れそうです。

    参考サイトはこちらです。
    https://qiita.com/YusukeHarada/items/a1e381f624dad96aeeca

    キャンセル

  • 2018/04/13 10:08

    > opencvはvsでしかコンパイル出来ません。
    んなわきゃない。MSYS2+cmakeでもビルドできた事は確認しています。

    キャンセル

  • 2018/04/13 10:35

    あ、ごめんなさい。説明不足でした。opencvに付属している静的、動的ライブラリはvsでしか使えません。
    なので、gccで使うにはライブラリの元になったソースコードをgccでコンパイルしなくてはいけないのですよね?と聞きたかったのです。
    また、vsで得られた実行ファイルをコンパイラAで逆アセンブルします。それによって得られたアセンブリプログラムはコンパイラAでしか使えないのですよね?とも聞きたかったのです。

    キャンセル

  • 2018/04/13 12:27

    C言語版インタフェースのみを用いるならばVSでビルドされたDLLを用いる方法が無いわけじゃないな
    C++だと無理だが

    実行ファイルを逆アセンブルしたソースがreassembleできるかは逆アセンブル時に使用したツール次第です。
    また、仮にできたとして、それにリンクできるかは微妙ですね。呼び出し規約等を小細工なしには無理でしょう。

    キャンセル

  • 2018/04/13 20:07

    > gccで使うにはライブラリの元になったソースコードをgccでコンパイルしなくてはいけないのですよね?

    いいえ。

    MSYS2でGCC用のOpenCVが用意されているので、コンパイルする必要はありません。回答の通りに実施すれば、GCCだけでOpenCVのサンプルがコンパイルできます。

    キャンセル

  • 2018/04/13 22:09

    どうもありがとうございます。

    キャンセル

  • 2018/04/13 22:41

    ちなみに、GCC用のOpenCVを作った人は地道にコンパイルして、いくつかのライブラリファイルを一つにまとめてcore.libなどにしたのでしょうか?どうやって一つにまとめたかはわかりません。
    あるいは何かしらの便利なツールがあったのですか?

    キャンセル

  • 2018/04/13 23:35 編集

    >carnage0216
    毎度横から失礼します。以前にも書いた気がしますが、無用にコメントが長くなるから違う質問を派生させるのは止めましょう。静的ライブラリ(*.lib) でも、動的ライブラリ(*.dll, *.so)でも、それ用のツール(ライブラリアン)があります。例えばVisual Studio ならlib.exe, gccのbinutils/ツールチェインならarです。

    キャンセル

  • 2018/04/14 00:02

    yumetodoさんの回答でも紹介してある通り
    https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-opencv
    にバイナリパッケージを作るための情報が全て載っています。
    どんな風にビルドしているのかはPKGBUILDの中身を見てください。13種類のパッチを当て、cmakeでMakefile等を作成し、makeしているだけです。

    キャンセル

  • 2018/04/15 15:40 編集

    なおPKGBUILDのなんたるかは
    https://wiki.archlinux.jp/index.php/PKGBUILD
    https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E4%BD%9C%E6%88%90
    https://wiki.archlinux.jp/index.php/Pacman
    を見てください。

    キャンセル

  • 2018/04/15 15:43

    raccyさん、dodox86さん、yumetodoさん、本当にどうもありがとうございます。大変勉強になりました。

    キャンセル

+2

そもそも OpenCVはMinGWでビルドできるの? 確認した? ちゃんとCMake使った?
...で、目的は何なんだ? VS版OpenCVあるんでしょ? Linuxでならともかくも、なんでWindowsでgccなの?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/12 19:37

    cmakeは使いました。
    OpenCVはMinGWでビルドできないです。なので、mingwでもビルドというよりコンパイルするためにライブラリのソースコードをgcc(mingw)でコンパイルしようと考えました。
    ただ、コンパイルするにもソースコードの量は多く、mingw用の大量のバイナリをどうやって一つにまとめて良いのか...課題は多いです。
    目的はgcc(mingw)でopencvを使うためです。
    pcのosがWindowsであるためです。

    キャンセル

  • 2018/04/12 21:05

    やりたいのを止めることはできんがな。
    僕はお役に立てそうにない。

    キャンセル

  • 2018/04/12 21:27

    わがままばかりいって申し訳ありません。
    幸いにもmingwとWindows用のopencvが見つかりました。
    こちらを使ってみます。
    https://github.com/huihut/OpenCV-MinGW-Build

    キャンセル

  • 2018/04/13 00:06

    知恵袋にも投稿ですかな。
    まてよたまたま類似しただけかな。
    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13188916223

    キャンセル

  • 2018/04/13 00:08

    似ていますが、違いますね。参考になるかもしれないのでこれは見させていただきます。

    キャンセル

  • 2018/04/13 00:10

    ちなみに知恵袋は数か月前までやってましたが今はほとんどやっていません。

    キャンセル

0

iw_core.hを見てみると
※"#"があるとみにくくなるようなので #を省略。。#ifdef ~#endif

#ifdef ICV_BASE
include "ippicv.h"
#else
include "ippcore.h"
#endif

コンパイル時ICV_BASEが付与されちる場合、ippicv.hがインクルードされ
ippicv.hには

#include "ippicv_l.h"
#include "ippicv_defs.h"
#include "ippicv_types.h"
#include "ippicv_redefs.h"
#include "ippversion.h"


とありますね。
ICV_BASEを無効にするか不足しているヘッダファイルなどを入手する事をおすすめします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/13 04:26

    どうもありがとうございます。
    とりあえずはICV_BASEを無効にする方針で進ませていただきます。

    キャンセル

  • 2018/04/13 04:32

    ちなみになぜiw_core.hに着眼点を置いたのでしょうか?

    キャンセル

  • 2018/04/13 06:46

    プログラミングのコードは前後の行に
    ```
    をつけてください。#があっても見出しドーン!になりません。該当部分を選択して「</>」を押すことでも可能です。回答欄もMarkdownの亜種なので、Markdownに従って書くと、読みやすくわかりやすい回答を書くことができます。

    キャンセル

  • 2018/04/13 11:49

    raccyさんありがとうございます。さっそく修正いたしました。
    > ちなみになぜiw_core.hに着眼点を置いたのでしょうか?
    提示されておられるコンパイルエラーメッセージから関連するインクルードファイルを調べただけです。

    キャンセル

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3835questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • OpenCV

    1170questions

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

  • GCC

    143questions

    GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

  • MinGW

    52questions

    MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。