使用命名空间别名编译 OpenCV
compiling opencv using namespace alias
我们需要将opencv库完全合并到我们的自定义库中。
(我们可以通过使用 bcp 使用命名空间别名来使用 Boost 来做到这一点,例如:dist/bin/bcp --namespace=customboost --namespace-alias module-list (
同样,我们是否有一种简单的方法将opencv完全包装到自定义命名空间中?
我们之所以想要这样做,是因为 opencv 是一个静态链接到我们面向客户的自定义库(同样是静态(的实现细节。我们不希望从自定义库导出的 cv 符号与全局空间发生冲突。
命名空间
别名的另一种方法是获取OpenCV源代码,并将cv(命名空间(的任何occurrency替换为新的自定义命名空间名称。
使用正则表达式,您将替换:
([^a-zA-Z0-9_])cv([^a-zA-Z0-9_])
跟:
$1myCv$2
说明:cv,前后跟着不在集合a-zA-Z0-9_
中的任何字符。匹配表达式中的括号以及替换表达式中的$1
和$2
用于将前后字符放回原位。
例:
#ifdef HAVE_OPENCL
namespace cv
{
namespace ocl
{
${nested_namespace_start}
")
cv::try
cv_wontsubstitute
成为:
#ifdef HAVE_OPENCL
namespace myCv
{
namespace ocl
{
${nested_namespace_start}
")
myCv::try
cv_wontsubstitute
一个更疯狂的想法可能是编译你的库和opencv定义一个宏
。#define cv myCv
允许预处理器重命名 OpenCV 命名空间。实际上,您将使用-D cv=myCv
调用编译器
与boost bcp不同,OpenCV没有提供任何本机实用程序。但这是一个相当简单的任务,可以使用正则表达式来实现。
这有效,现在我已经使用 mycustomcv 命名空间编译了 OpenCV 版本
find . -type f -name '*.cpp' -o -name '*.hpp' -o -name '*.h' -o -name '*.cmake' -o -name '*.py'| xargs sed -i '/using/! s/<namespace cv>/namespace mycustomcv{} namespace cv = mycustomcv; namespace mycustomcv/g'
运行脚本后,命名空间从 namespace cv {...}
更改为
namespace mycustomcv{} namespace cv = mycustomcv; namespace mycustomcv
{
//whatever
}
同时跳过using namespace cv;
声明。
例如,名称损坏的符号如下所示,
_ZZN8mycustomcv25getMorphologyColumnFilterEiiii // namespace mycustomcv
_ZZN8cv25getMorphologyColumnFilterEiiii // namespace cv
相关文章:
- Mingw-64 在构建和安装后不会编译 openCV 代码
- 无法在 CLion 中编译 OpenCV 头文件
- 在Linux/Ubuntu中编译openCV应用程序时,如何解决未定义的引用cv:..?
- 在构建时从源代码编译 OpenCV 3
- 编译 opencv 示例麻烦
- 尝试从 Github 编译 OpenCV QT 代码时出错
- 当 Mingw 为 C++ 编译 OpenCV 时,我遇到错误?
- 如何使用text.hpp(可选模块)重新编译OpenCV
- 使用命名空间别名编译 OpenCV
- 从源代码编译 openCV:*** 未指定目标,也未找到生成文件.停
- 如何用GTK 2.x而不是GTK3.X编译OpENCV
- 在 ubuntu 上交叉编译 openCV for ARM
- 当我尝试在启用推理引擎的情况下编译 OpenCv 时,出现错误
- 无法使用 OpenVino 推理编译 OpenCV,无法读取 cpuid.txt
- 在Debian上编译OpenCV(C++)时出错
- 如何使用Fast Downward编译OpenCV
- 使用CUDA编译OpenCV示例程序时出错
- C++ - 无法编译 OpenCV 程序
- 如何使用OpenMP编译OpenCV
- 使用CMake编译OpenCV项目时出错