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

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

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

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

C++

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

Q&A

3回答

4754閲覧

C++のプログラムでエラーが出る

aiueoaiueoaiue

総合スコア94

OpenCV

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

C++

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

0グッド

0クリップ

投稿2018/04/09 06:42

###実現したいこと
OpenCV3.4.1のビルド中にエラーが発生してしまいました。エラー元のファイルが.cppなので言語はC++ということは分かったのですが、いかんせんC++には触れたことがないのでエラーに対してどう対処すれば分かりません。回答お願いします。
###ソースコード

C++

1#include "precomp.hpp" 2 3#include <opencv2/core/utils/configuration.private.hpp> 4 5#include <opencv2/core/utils/logger.hpp> 6 7#include "opencv2/core/utils/filesystem.private.hpp" 8#include "opencv2/core/utils/filesystem.hpp" 9 10//#define DEBUG_FS_UTILS 11 12#ifdef DEBUG_FS_UTILS 13#include <iostream> 14#define DBG(...) __VA_ARGS__ 15#else 16#define DBG(...) 17#endif 18 19 20#if OPENCV_HAVE_FILESYSTEM_SUPPORT 21 22#ifdef _WIN32 23#define WIN32_LEAN_AND_MEAN 24#undef NOMINMAX 25#define NOMINMAX 26#include <windows.h> 27#include <direct.h> 28#include <sys/types.h> 29#include <sys/stat.h> 30#include <errno.h> 31#include <io.h> 32#include <stdio.h> 33#elif defined __linux__ || defined __APPLE__ 34#include <sys/types.h> 35#include <sys/stat.h> 36#include <fcntl.h> 37#include <unistd.h> 38#include <errno.h> 39#endif 40 41#endif // OPENCV_HAVE_FILESYSTEM_SUPPORT 42 43namespace cv { namespace utils { namespace fs { 44 45#ifdef _WIN32 46static const char native_separator = '\'; 47#else 48static const char native_separator = '/'; 49#endif 50 51static inline 52bool isPathSeparator(char c) 53{ 54 return c == '/' || c == '\'; 55} 56 57cv::String join(const cv::String& base, const cv::String& path) 58{ 59 if (base.empty()) 60 return path; 61 if (path.empty()) 62 return base; 63 64 bool baseSep = isPathSeparator(base[base.size() - 1]); 65 bool pathSep = isPathSeparator(path[0]); 66 String result; 67 if (baseSep && pathSep) 68 { 69 result = base + path.substr(1); 70 } 71 else if (!baseSep && !pathSep) 72 { 73 result = base + native_separator + path; 74 { 75 return result; 76} 77 78#if OPENCV_HAVE_FILESYSTEM_SUPPORT 79 80bool exists(const cv::String& path) 81{ 82 CV_INSTRUMENT_REGION() 83 84#if defined _WIN32 || defined WINCE 85 BOOL status = TRUE; 86 { 87 WIN32_FILE_ATTRIBUTE_DATA all_attrs; 88#ifdef WINRT 89 wchar_t wpath[MAX_PATH]; 90 size_t copied = mbstowcs(wpath, path.c_str(), MAX_PATH); 91 CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); 92#else 93#endif 94 } 95 96 return !!status; 97#else 98 struct stat stat_buf; 99 return (0 == stat(path.c_str(), &stat_buf)); 100#endif 101} 102 103CV_EXPORTS void remove_all(const cv::String& path) 104{ 105 if (!exists(path)) 106 return; 107 if (isDirectory(path)) 108 { 109 std::vector<String> entries; 110 utils::fs::glob(path, cv::String(), entries, false, true); 111 for (size_t i = 0; i < entries.size(); i++) 112 { 113 const String& e = entries[i]; 114 remove_all(e); 115 } 116#ifdef _MSC_VER 117 bool result = _rmdir(path.c_str()) == 0; 118#else 119 bool result = rmdir(path.c_str()) == 0; 120#endif 121 if (!result) 122 { 123 CV_LOG_ERROR(NULL, "Can't remove directory: " << path); 124 } 125 } 126 else 127 { 128#ifdef _MSC_VER 129 bool result = _unlink(path.c_str()) == 0; 130#else 131 bool result = unlink(path.c_str()) == 0; 132#endif 133 if (!result) 134 { 135 CV_LOG_ERROR(NULL, "Can't remove file: " << path); 136 } 137 } 138} 139(途中省略) 140 141 142(313行目から) 143#elif defined __linux__ || defined __APPLE__ 144 145struct FileLock::Impl 146{ 147 Impl(const char* fname) 148 { 149 handle = ::open(fname, O_RDWR); 150 CV_Assert(handle != -1); 151 } 152 ~Impl() 153 { 154 if (handle >= 0) 155 ::close(handle); 156 } 157 158 bool lock() 159 { 160 struct ::flock l; 161 std::memset(&l, 0, sizeof(l)); 162 l.l_type = F_WRLCK; 163 l.l_whence = SEEK_SET; 164 l.l_start = 0; 165 l.l_len = 0; 166 DBG(std::cout << "Lock..." << std::endl); 167 bool res = -1 != ::fcntl(handle, F_SETLKW, &l); 168 return res; 169 } 170 bool unlock() 171 { 172 struct ::flock l; 173 std::memset(&l, 0, sizeof(l)); 174 l.l_type = F_UNLCK; 175 l.l_whence = SEEK_SET; 176 l.l_start = 0; 177 l.l_len = 0; 178 DBG(std::cout << "Unlock..." << std::endl); 179 bool res = -1 != ::fcntl(handle, F_SETLK, &l); 180 return res; 181 } 182 183 bool lock_shared() 184 { 185 struct ::flock l; 186 std::memset(&l, 0, sizeof(l)); 187 l.l_type = F_RDLCK; 188 l.l_whence = SEEK_SET; 189 l.l_start = 0; 190 l.l_len = 0; 191 DBG(std::cout << "Lock read..." << std::endl); 192 bool res = -1 != ::fcntl(handle, F_SETLKW, &l); 193 return res; 194 } 195 bool unlock_shared() 196 { 197 return unlock(); 198 } 199 200 int handle; 201 202private: 203 Impl(const Impl&); // disabled 204 Impl& operator=(const Impl&); // disabled 205}; 206 207#endif 208 209FileLock::FileLock(const char* fname) 210 : pImpl(new Impl(fname)) 211{ 212 // nothing 213} 214FileLock::~FileLock() 215{ 216 delete pImpl; 217 pImpl = NULL; 218} 219 220void FileLock::lock() { CV_Assert(pImpl->lock()); } 221void FileLock::unlock() { CV_Assert(pImpl->unlock()); } 222void FileLock::lock_shared() { CV_Assert(pImpl->lock_shared()); } 223void FileLock::unlock_shared() { CV_Assert(pImpl->unlock_shared()); } 224 225 226

###エラーメッセージ

filesystem.cpp:108:17: error: variable has incomplete type 'struct stat' struct stat stat_buf; ^ filesystem.cpp:129:23: error: use of undeclared identifier 'rmdir' bool result = rmdir(path.c_str()) == 0; ^ filesystem.cpp:141:23: error: use of undeclared identifier 'unlink' bool result = unlink(path.c_str()) == 0; ^ filesystem.cpp:380:17: error: allocation of incomplete type 'cv::utils::fs::FileLock::Impl' : pImpl(new Impl(fname)) ^~~~ filesystem.cpp:390:40: error: member access into incomplete type 'cv::utils::fs::FileLock::Impl' void FileLock::lock() { CV_Assert(pImpl->lock()); } ^ filesystem.cpp:391:42: error: member access into incomplete type 'cv::utils::fs::FileLock::Impl' void FileLock::unlock() { CV_Assert(pImpl->unlock()); } ^ filesystem.cpp:392:47: error: member access into incomplete type 'cv::utils::fs::FileLock::Impl' void FileLock::lock_shared() { CV_Assert(pImpl->lock_shared()); } ^ filesystem.cpp:393:49: error: member access into incomplete type 'cv::utils::fs::FileLock::Impl' void FileLock::unlock_shared() { CV_Assert(pImpl->unlock_shared()); } ^

###補足情報
OS:FreeBSD11.1
OpenCV3.4.1

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

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

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

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

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

guest

回答3

0

https://opencv.org

OpenCV (Open Source Computer Vision Library) is released under a BSD license and hence it’s free for both academic and commercial use. It has C++, Python and Java interfaces and supports Windows, Linux, Mac OS, iOS and Android.

との事なのでOpenCVはおそらくFreeBSDをサポートしてないのでしょうね。

NetBSDのpkgsrcを使うことでビルドできそうな雰囲気はあります。
現在試していますが、ちょっと1日くらい掛かりそうです

投稿2018/04/10 07:06

asm

総合スコア15147

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

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

aiueoaiueoaiue

2018/04/10 09:51

portsの中にopencv2.4.13があるので3系も頑張ればビルド出来るのかなと思ってたんですが、中々難しいんですね。
asm

2018/04/10 09:56

pkgsrcを使った結果gtk2のビルド中に死にました。 大分頑張る必要がありそうですね
guest

0

コンパイル時に必要な
・インクルード
・ライブラリ
のパスがないものと思われます。
struct stat構造体はstat.h
コンパイルする前に環境変数をチェックしてください。

投稿2018/04/09 07:45

YomogiKOBO

総合スコア187

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

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

guest

0

”Undeclared"(宣言(定義)されていません)とか"incomplete type"(不完全な型)とかのエラーメッセージなのですから、関数や型を宣言しているヘッダーファイル(*.hpp)が適切にincludeできていない疑いがあります。

#include "precomp.hpp" #include <opencv2/core/utils/configuration.private.hpp> #include <opencv2/core/utils/logger.hpp> #include "opencv2/core/utils/filesystem.private.hpp" #include "opencv2/core/utils/filesystem.hpp"

のように、ベースのディレクトリを基準にする""で括られたファイルの指定(普通はソースプログラムの構成に依存した階層になる)と、Include_Pathを基準にする<>で括られたファイルの指定(ライブラリに依存した階層になる)で、同じディレクトリ階層(opencv2/core/util)が現れるは極めて稀なので、この5行から確認を始めると良いと思います。

投稿2018/04/09 07:14

coco_bauer

総合スコア6915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問