在 C++ 中编译 opencv
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9094941/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
compiling opencv in c++
提问by nkint
i have a file with only import:
我有一个只有导入的文件:
#include <iostream>
#include <stdio.h>
#include "cxcore.hpp"
#include "highgui.hpp"
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
}
and i try to compile with g++ -I/usr/include/opencv -lopencv -lm m.cpp
我尝试用 g++ -I/usr/include/opencv -lopencv -lm m.cpp 编译
but get whit error:
但得到一点错误:
In file included from /usr/include/opencv/cxcore.hpp:46, from m.cpp:5: /usr/include/opencv/cxmisc.h:214: error: expected constructor, destructor, or type conversion before ‘void' /usr/include/opencv/cxmisc.h:220: error: expected constructor, destructor, or type conversion before ‘int' /usr/include/opencv/cxmisc.h:226: error: ‘CV_INLINE' does not name a type /usr/include/opencv/cxmisc.h:516: error: ‘CV_DEPTH_MAX' was not declared in this scope /usr/include/opencv/cxmisc.h:522: error: ‘CV_DEPTH_MAX' was not declared in this scope /usr/include/opencv/cxmisc.h:522: error: ‘CV_CN_MAX' was not declared in this scope In file included from m.cpp:5: /usr/include/opencv/cxcore.hpp:70: error: template declaration of ‘cv::CV_EXPORTS cv::Size_' /usr/include/opencv/cxcore.hpp:71: error: template declaration of ‘cv::CV_EXPORTS cv::Point_' /usr/include/opencv/cxcore.hpp:72: error: template declaration of ‘cv::CV_EXPORTS cv::Rect_' /usr/include/opencv/cxcore.hpp:77: error: expected initializer before ‘fromUtf16' /usr/include/opencv/cxcore.hpp:78: error: expected initializer before ‘toUtf16' /usr/include/opencv/cxcore.hpp:80: error: expected initializer before ‘format' /usr/include/opencv/cxcore.hpp:82: error: expected initializer before ‘:' token m.cpp:38: error: expected ‘}' at end of input
在来自 /usr/include/opencv/cxcore.hpp:46 的文件中,来自 m.cpp:5: /usr/include/opencv/cxmisc.h:214: 错误:预期的构造函数、析构函数或类型转换在 'void 之前' /usr/include/opencv/cxmisc.h:220: 错误:'int' 之前的预期构造函数、析构函数或类型转换 /usr/include/opencv/cxmisc.h:226: 错误:'CV_INLINE' 未命名类型 /usr/include/opencv/cxmisc.h:516: 错误: 'CV_DEPTH_MAX' 未在此范围内声明 /usr/include/opencv/cxmisc.h:522: 错误: 'CV_DEPTH_MAX' 未在此范围内声明 / usr/include/opencv/cxmisc.h:522: 错误: 'CV_CN_MAX' 未在此范围内声明在 m.cpp:5 包含的文件中: /usr/include/opencv/cxcore.hpp:70: 错误: 模板声明'cv::CV_EXPORTS cv::Size_' /usr/include/opencv/cxcore.hpp:71: 错误:'cv::CV_EXPORTS cv::Point_' /usr/include/opencv/cxcore.hpp:72 的模板声明:错误:'cv::CV_EXPORTS cv::Rect_'/usr/include/opencv/cxcore 的模板声明。 hpp:77: 错误: 'fromUtf16' 之前的预期初始化程序 /usr/include/opencv/cxcore.hpp:78: 错误: 'toUtf16' 之前的预期初始化程序 /usr/include/opencv/cxcore.hpp:80: 错误: 预期的初始化程序在“格式”/usr/include/opencv/cxcore.hpp:82 之前:错误:在“:”标记之前的预期初始值设定项:m.cpp:38:错误:在输入结束时预期为“}”'toUtf16' 之前的预期初始值设定项 /usr/include/opencv/cxcore.hpp:80: 错误:'format' 之前的预期初始值设定项 /usr/include/opencv/cxcore.hpp:82: 错误:':' 标记之前的预期初始值设定项 m .cpp:38: 错误:输入结束时应为“}”'toUtf16' 之前的预期初始值设定项 /usr/include/opencv/cxcore.hpp:80: 错误:'format' 之前的预期初始值设定项 /usr/include/opencv/cxcore.hpp:82: 错误:':' 标记之前的预期初始值设定项 m .cpp:38: 错误:输入结束时应为“}”
this is my copencv lib content:
这是我的 copencv lib 内容:
alberto@zefiro:~$ ls /usr/include/opencv/
cvaux.h cvcompat.h cv.hpp cvtypes.h cvvidsurv.hpp cxcore.h cxerror.h cxmat.hpp cxoperations.hpp highgui.h ml.h
cvaux.hpp cv.h cvinternal.h cvver.h cvwimage.h cxcore.hpp cxflann.h cxmisc.h cxtypes.h highgui.hpp
i'm on ubuntu 10.10
我在 ubuntu 10.10
回答by karlphillip
You need to properly include the headers -I
(capital i) and libraries -l
(lowercase L).
您需要正确包含标题-I
(大写 i)和库-l
(小写 L)。
On the newest OpenCV versions you should do:
在最新的 OpenCV 版本上,您应该执行以下操作:
#include <cv.h>
#include <highgui.h>
And then try to compile it with:
然后尝试编译它:
g++ m.cpp -o app `pkg-config --cflags --libs opencv`
Note: if you execute only pkg-config --cflags --libs opencv
in the command line you will see the paths and libraries you need to include in the g++ command line.
注意:如果仅pkg-config --cflags --libs opencv
在命令行中执行,您将看到需要包含在 g++ 命令行中的路径和库。
回答by Jonathan Ben-Avraham
if your development environment does not have pkg-config
and because of this the accepted answer by karlphilipis not practical, or, you need to know the minimal set of libraries required to link your application, then assuming code such as
如果您的开发环境没有pkg-config
,因此karlphilip 接受的答案不切实际,或者,您需要知道链接您的应用程序所需的最少库集,然后假设代码如下
#include <cv.h>
#include <highgui.h>
int main()
{
return 0;
}
you can add library arguments from the following list sequentially from the top until you find the minimal set of arguments that you need:
您可以从以下列表中从顶部依次添加库参数,直到找到所需的最小参数集:
-lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
For example, the C source code listed at the top of this post compiles and links cleanly with only
例如,本文顶部列出的 C 源代码仅使用
gcc hello.c -o hello \
-I /usr/include/opencv \
-L /usr/lib \
-lopencv_core \
-lopencv_imgproc
on my old x86_64 Ubuntu 12.04 box.
在我的旧 x86_64 Ubuntu 12.04 盒子上。
Assuming C++ code such as
假设 C++ 代码如
#include "core/core.hpp"
#include "highgui/highgui.hpp"
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
return 0;
}
then you would compile and link with
然后你会编译和链接
g++ hello.cpp -o hello \
-I /usr/include/opencv2 \
-L /usr/lib \
-lopencv_core \
-lopencv_imgproc
回答by Sendjasni
I suggest you use CMake to compile OpenCV
with G++
, this way is more suitable, I think.
我建议你使用的CMake编译OpenCV
使用G++
,这种方式比较适合,我想。
cmake_minimum_required(VERSION 3.1)
project(YOUR_PROJECT_NAME)
set(CMAKE_GXX_FLAGS "-Wall -Wextra -Wconversion -pedantic -std=gnu11")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(YOUR_EXCUTABLE YOUR_CODE_SOURCE_FILES)
target_link_libraries(YOUR_EXCUTABLE ${OpenCV_LIBS})
回答by Giorgi Gvimradze
- Download source files in OpenCVfolder and install-opencv.shscript.
By running script file you automatically install needed files for opencv. Run the following code:
chmod +x install-opencv.sh ./install-opencv.sh
- 下载OpenCV文件夹中的源文件并 安装-opencv.sh脚本。
通过运行脚本文件,您可以自动安装 opencv 所需的文件。运行以下代码:
chmod +x install-opencv.sh ./install-opencv.sh
In case if you install different version of the library please update the first line of version inside the installation script. For more information use thistutorial. Compile it with the next line:
如果您安装不同版本的库,请更新安装脚本中版本的第一行。有关更多信息,请使用本教程。用下一行编译它:
g++ `pkg-config --cflags opencv` example.cpp `pkg-config --libs opencv`