g++ 编译C++ opencv 文件

相关资料:

linux下编译C++写的opencv程序

http://hihozhou.com/blog/2017/05/11/linux-compile-opencv-c++-file.html

介绍了如何将opencv的库包含在编译的动态库中。

 

Linux 环境下使用g++编译C++

https://blog.csdn.net/dengshuai_super/article/details/51766786

介绍如何利用g++编译c++ 文件, 便于之后测试是否编译成功。

 

C++静态库与动态库

https://www.cnblogs.com/skynet/p/3372855.html

介绍linux/windows如何编译动态/静态库。

 

将三者结合,以下给一个例子:

一: 编译成可执行文件:

在某一个项目文件夹下有很多.cpp .h 等的文件,当然也包含了main函数。

(linux截图: shift+printScreen)

runtracker.cpp是主函数。一般需要编译的话直接g++ 之后加上所有的.cpp文件,.h会自动寻找。但是有两个问题,1.不支持c++11,这里只需要添加 -std=c++11。2. 无法找到opencv的库, 需要在后面加上 $(pkg-config --cflags --libs opencv) 这样会自动找到所有安装的opencv库。所以整个命令是:

g++ -std=c++11 runtracker.cpp kcftracker.cpp nonMaxSup.cpp fhog.cpp colorMoments.cpp -o main $(pkg-config --cflags --libs opencv)
之后 ./main 就可以运行。

二: 编译成动态库:

基本原理同上:

g++ -std=c++11 -fPIC -shared -o libKCF.so kcftracker.cpp nonMaxSup.cpp fhog.cpp colorMoments.cpp $(pkg-config --cflags --libs opencv)
注意此时不用包含main函数了。同时, -fPIC为生成位置独立文件, -shared表示为共享, 对于linux来说,生成的动态库命名格式固定为libXXX.so。

这里会生成一个a.out,但是./a.out 会报错 (见文章:C++静态库与动态库)。需要将生成的动态库copy到/usr/lib中。之后就可以运行了。

 

你可能感兴趣的:(g++ 编译C++ opencv 文件)