OpenCV, g++, vscode

Configrations

~/.bashrc:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/username/local/opencv-3.4.7/lib

Compile

demo

#include <opencv2/opencv.hpp>
#include <iostream>
// using namespace cv;
int main()
{
    cv::Mat img=cv::imread("man.jpg");
    cv::imshow("image",img);
    cv::waitKey();
    return 0;
}
  1. using pkg-config
g++ test.cpp  `pkg-config --cflags --libs opencv`  -o Test 
gcc main.c `pkg-config --cflags --libs gtk+-2.0`   -o main

~/.bashrc:

export PKG_CONFIG_PATH=/home/username/local/opencv-3.4.7/lib/pkgconfig:$PKG_CONFIG_PATH

/home/username/local/opencv-3.4.7/lib/pkgconfig/opencv.pc:

# Package Information for pkg-config
prefix=/home/username/local/opencv-3.4.7
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.7
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cvv -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_highgui -lopencv_videoio -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt -L/usr/lib/x86_64-linux-gnu -lGL -lGLU
Cflags: -I${includedir_old} -I${includedir_new}
g++ `pkg-config --cflags --libs opencv` test.cpp -o Test 
  1. directly use g++ command:
g++ -I(include path) -L(lib path) -l(which libxxx.so)  sourefile.cpp -o a.out
-I/usr/local/Cellar/opencv3/3.1.0_1/include/opencv 
-I/usr/local/Cellar/opencv3/3.1.0_1/include 
-L/usr/local/Cellar/opencv3/3.1.0_1/lib 
-lopencv_shape 
-lopencv_stitching 
-lopencv_objdetect 
-lopencv_superres 
-lopencv_videostab 
-lopencv_flann 
-lopencv_calib3d 
-lopencv_features2d 
-lopencv_videoio 
-lopencv_imgcodecs 
-lopencv_video 
-lopencv_photo 
-lopencv_ml 
-lopencv_imgproc 
-lopencv_core
-lopencv_highgui 

 username@HOME:~/wk/exp6/scc$ g++  main.cpp -o a.out -I/home/username/local/opencv-3.4.7/include -L/home/username/local/opencv-3.4.7/lib/ -lopencv_core
/tmp/ccje9Ael.o: In function `main':
main.cpp:(.text+0x48): undefined reference to `cv::imread(cv::String const&, int)'
main.cpp:(.text+0x9c): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
main.cpp:(.text+0xc4): undefined reference to `cv::waitKey(int)'
collect2: error: ld returned 1 exit status
username@HOME:~/wk/exp6/scc$ g++  main.cpp -o a.out -I/home/username/local/opencv-3.4.7/include -L/home/username/local/opencv-3.4.7/lib/ -lopencv_core -lopencv_highgui
/usr/bin/ld: /tmp/cclltTat.o: undefined reference to symbol '_ZN2cv6imreadERKNS_6StringEi'
//home/username/local/opencv-3.4.7/lib/libopencv_imgcodecs.so.3.4: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
username@HOME:~/wk/exp6/scc$ g++  main.cpp -o a.out -I/home/username/local/opencv-3.4.7/include -L/home/username/local/opencv-3.4.7/lib/ -lopencv_core -lopencv_highgui -lopencv_imgproc
/usr/bin/ld: /tmp/ccpwjZbD.o: undefined reference to symbol '_ZN2cv6imreadERKNS_6StringEi'
//home/username/local/opencv-3.4.7/lib/libopencv_imgcodecs.so.3.4: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
username@HOME:~/wk/exp6/scc$ g++  main.cpp -o a.out -I/home/username/local/opencv-3.4.7/include -L/home/username/local/opencv-3.4.7/lib/ -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs
  1. Makefile
    CMake
    http://blog.csdn.net/lj402159806/article/details/76408597 (安装)
    https://www.jianshu.com/p/c042abb42133 (使用教程)
    sudo apt-get install cmake
    (版本匹配很重要,新版的可以直接从源码编译安装也很简单。对于特定的开发项目可能需要特定的cmake版本,建立一个软连接将/usr/local/bin/目录下就行了)
    编写CMakeLists.txt
    cmake_minimum_required (VERSION 2.6) //cmake版本配置
    project () //项目信息描述,仅仅是个描述而已,好像没任何用处
    add_executable (exe src1 src2 ...) //最终的可执行文件, + 使用哪些源文件进行生成
    add_library (lib [STATIC|SHARED] src) //生成库文件
    target_link_libraries (whichexe whichlib <debug|optimal> lib2 <>...) // 指定将某个库链接到对应的可执行文件中
    add_subdirectory ()//添加子文件夹,其中的CMakeList也会递归的处理
    aux_source_directory(realdirname NAME) //将所有dir下的所有文件名 添加到变量cmake变量中,引用变量:${NAME}
    set(YOURNAME main.cpp pf.cpp) //定义cmake变量
    link_directories(dir1 dir2) //添加链接库的搜索路径
    include_directories([BEFORE|AFTER] dir1 dir2 ) //添加头文件的搜索路径,before和after用来控制其与当前路径之间的前后关系
    add_definitions (-DDEBUG)//添加编译器编译命令行参数
    执行cmake .
    之后会自动检测系统的各种编译器 生成对应的编译工程文件(通过源码生成编译器需要的整个工程文件如vs的sln和vcxproj工程文件)。
    整个过程的错误信息会记录到cmake的log文件中。

编译使用了OpenCV的工程:CMakeList.txt

cmake_minimum_required(VERSION 2.8)  
project(opencv)  
find_package(OpenCV REQUIRED)  
add_executable(opencv opencv.cpp)  
target_link_libraries(opencv ${OpenCV_LIBS})  

vscode config

https://www.cnblogs.com/YiYA-blog/p/10082635.html

./.vscode/launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "command": "g++",
    "args": [
        "-g", "-std=c++11", "${file}", "-o", "${fileBasenameNoExtension}",//"main.cpp", "text.cpp","-o","a.out",
        "-I", "/home/username/local/opencv-3.4.7/include",
        "-I", "/home/username/local/opencv-3.4.7/include/opencv",
        "-I", "/home/username/local/opencv-3.4.7/opencv2",
        "-L", "/home/username/local/opencv-3.4.7/lib",
        "-l", "opencv_core",
        "-l", "opencv_imgproc",
        "-l", "opencv_imgcodecs",
        "-l", "opencv_video",
        "-l", "opencv_ml",
        "-l", "opencv_highgui",
        "-l", "opencv_objdetect",
        "-l", "opencv_flann",
        "-l", "opencv_imgcodecs",
        "-l", "opencv_photo",
        "-l", "opencv_videoio"
    ],// g++编译命令参数
    "problemMatcher":{
        "owner": "cpp",
        "fileLocation":[
            "relative",
            "${workspaceFolder}"
        ],
        "pattern":[
            {
                "regexp": "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$",
                "file": 1,
                "location": 2,
                "message": 3
            }
        ]
    },
    "group": {
        "kind": "build",
        "isDefault": true
    }
}

For vscode
c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/home/username/local/opencv-3.4.7/include",
                "/home/username/local/opencv-3.4.7/include/opencv2",
                "/home/username/local/opencv-3.4.7/include/opencv"                
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

ctrl+shift+B compile

https://blog.csdn.net/u014267567/article/details/53842915 OpenCV中实现MATLAB中的conv2函数

gcc

gcc 命令几个重要选项:
-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号,不用该标志外部程序无法连接。相当于一个可执行文件)。
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
-L.:表示要连接的库在当前目录中。
-lxx:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称(libxx.so)

修改gcc版本:

  • 安装完新的gcc之后,一般是放在/usr/bin/gcc-4.9 附带版本号
  • 系统真正使用的是/usr/bin/gcc这个软链接,所以安装完成之只需要将软链接连接到新的gcc上就可以了。

http://blog.csdn.net/autoliuweijie/article/details/50950300
http://blog.csdn.net/keith_bb/article/details/52864851
http://blog.csdn.net/luotuo44/article/details/24836901 (\star)
http://blog.csdn.net/autoliuweijie/article/details/50950300
-w 不生成任何警告信息
-Wall生成所有警告信息
-o指定生成的文件名(-E,-S,-c说明生成什么样的文件)
-O0~3编译优化
-g生成调试信息
-E只运行预编译(处理include头文件等)不生成文件
-S翻译成汇编语言
-c生成.o二进制目标文件
-I添加额外的头文件搜搜路径,否则系统仅仅在标准目录中搜索(先再当前目录查找then系统目录,定义了-I则先在I目录查找then当前then系统)
-idirafter(-I的目录放到后面)
-include+dir/xxx.h 直接include一个头文件
-L添加额外的库搜索路径
-l连接库(需要放到最后,且要省去前面的lib和后面的.a)
-static使用静态连接库生成
-shared使用动态链接库连接
-MM生成文件关联信息
gcc 后面是需要编译的文件列表(修饰-E,-S,-c),生成控制-o,优化-O,-W,-g,额外的头文件搜索目录-I,库目录-L,库-l
gcc -E main.c > preprocess.txt 预处理
gcc -S main.c 预处理+编译生成汇编文件
gcc -c main.c 生成.o文件
gcc -o a.out main.cpp hello.cpp -lopencv
g++ pkg-config opencv --cflags opencv.cpp -o opencv pkg-config opencv --libs
gcc main.c pkg-config --cflags --libs gtk+-2.0 -o main
http://blog.csdn.net/luotuo44/article/details/16970841 (c语言编译详解)
编译成库文件:
静态库:
ar -cr libpalm.a add.o sub.o (将目标文件链接成一个静态库文件libxxx.a)
ar -t libpalm.a 查看静态库libpalm.a中包含的.o目标文件
动态库:
http://www.cnitblog.com/windone0109/archive/2008/04/23/42653.html
gcc -c pos_conf.c
gcc -shared -fPCI -o libpos.so pos_conf.o
gcc -o pos main.c -L. -lpos 常用的写到默认路径,不常用的编译时通过参数指明

/etc/ld.so.conf
ldconfig
LD_LIBRARY_PATH

使用c++11:
gcc -o out main.cpp -std=c++11

References:
https://blog.csdn.net/s15810751918/article/details/107705387

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容