int64 的相冲突类型def
- 系统信息(版本)
- 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)
内容来源: opencv/opencv