#7573·opencv

int64 的相冲突类型def

作者: sasavilic创建于 2016年10月28日更新于 2026年9月17日
标签category: build/installRFCfuture
  • 系统信息(版本)
  • OpenCV − 2.4.9(2.4.9.1+dfsg-1.5ubuntu1)
  • 操作系统/平台 -- -- Ubuntu 16.04, 64位
  • GNU GC 5.2编译器
  • 详细说明

OpenCV在全局命名空间中有类型def, 如果其他库有相冲突类型def, 则会阻碍编译. 目前,我们知道有一个图书馆(libgeos)与类型防御系统有冲突。 我们准备向Libgeos提交类似的错误报告。

页:1 // 自由语 ltetdef 长长英寸英寸64; // 打开cv 类型def int64 t int64;


我知道这个问题可以通过汇编不同编译单元的代码来解决,但目前我们共享的代码不能在不同的编译单元中分离(或至少不容易). 在这种情况下,唯一的选择是要么与typedef相混淆,即:

页:1
# define int64 opencv broken int (英语).
# 包含 <opencv2/imgproc/imgproc.hpp>
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}不拒绝64
# 包括 <geos/geom/Coord.h>

内主( int, argc**)
{
返回 0;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

或制作包装界面并将其编译为不同的编译单元。 尽管如此,最漂亮的解决方案是如果opencv能够停止在全局命名空间使用像int64这样的常见类型名.

我知道,由于C接口,使用C++命名空间可能不是选项,但至少可以使用前缀的型号def,即opencv int64 / cv int64或相类似. 这种类型def不会打破ABI,尽管它会改变API.

一旦我们同意应确定这一点并商定处理这一问题的最佳办法,我们准备为这一问题投入资源并提供一个补丁。

  • 复制步骤

页:1 //样本.cpp

包括 <geos/geom/Coord.h>

包含 <opencv2/imgproc/imgproc.hpp>

内主( int, argc**) { 返回 0; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

$g++ -c 样本.cpp 包含在从/usr/包括/opencv2/core/core.hpp:49:0的文件中. 从/usr/包括/opencv2/imgproc/imgproc.hpp:50, 从样本. cpp:2: /usr/包含/opencv2/core/types c.h:163:20:出错:相冲突的声明 'typedef int64 t int64' 类型def int64 t int64; ^ 档案中包含来自/usr/包括/geos/geom/Coord.h:19:0, 从样本. cpp:1: /usr/包括/geos/平面.h:66:26:注:先前宣布为 " Typedef long int.64 " ltetdef 长长英寸英寸64; ^ 样本.cpp:4:15:错误:`argc'尚未宣布 内主( int, argc**) ^ sample.cpp:4:5: 警告:"int main(int,int**)"的第二个论点应为"char ’ [-Wmain]". 内主( int, argc)