我使用OpenCV在C ++中编写了一个非常简单的类。
#include "librarytestcreate.h"
#include<highgui.hpp>
using namespace cv;
LibraryTestCreate::LibraryTestCreate()
{
}
int LibraryTestCreate::countRows(char *src)
{
Mat img = imread(src);
return img.rows;
}
标题librarytestcreate.h是: -
#ifndef LIBRARYTESTCREATE_H
#define LIBRARYTESTCREATE_H
#include "librarytestcreate_global.h"
class LIBRARYTESTCREATESHARED_EXPORT LibraryTestCreate
{
public:
LibraryTestCreate();
int countRows(char *src);
};
#endif // LIBRARYTESTCREATE_H
标题librarytestcreate_global.h根据this链接
定义了LIBRARYTESTCREATESHARED_EXPORT我希望在.dll文件(在Windows中)或.so文件(在Ubuntu中)中导出此类,以便在系统中未安装OpenCV的任何用户都可以使用此功能而无需安装OpenCV。 我试过this但我觉得我必须配置用户需要安装OpenCV才能使用它。我该如何处理这个问题?
答案 0 :(得分:0)
如果在动态库项目中使用OpenCV作为动态库,则在使用动态库时,动态库的用户也必须具有OpenCV动态库。之所以这样,是因为您的动态库依赖于OpenCV动态库。
如果您希望OpenCV动态库中不需要动态库的用户,则必须在动态库项目中将OpenCV用作静态库,或者在项目中直接添加所有OpenCV源(您需要的)。我真的不知道,是否可以将OpenCV用作静态库或重用其代码(我从不使用此库),可能存在一些许可限制。
我认为最好的方法是在一个已安装的软件包中为您的动态库提供OpenCV库。
答案 1 :(得分:0)
正如@Kirill Chernikov建议的那样,你需要静态库。其实,
为OpenCV构建它们非常容易。配置构建时,
指定BUILD_SHARED_LIBS
:
$ cmake $OTHER_CMAKE_PARAMETERS -DBUILD_SHARED_LIBS=OFF $SOURCE_DIR
当然,您还需要设置$OTHER_CMAKE_PARAMETERS
和
$SOURCE_DIR
,"Installation in Linux"和"Installation in Windows"中对此进行了解释
How do I draw a vertical line on a horizontal bar chart with ChartJS?
然后将静态库链接到动态库中。
作为旁注,请确保不在API中公开OpenCV数据类型 你的图书馆。否则事情会变得混乱。