【发布时间】:2019-10-21 12:32:45
【问题描述】:
对于我的硕士学位,我需要在一个名为 daddb 的数据库上工作(它在 git hub 上)。通常在 Linux 上,您可以简单地克隆它并“制作”它来安装。
安装 CMake 和 Cygwin 后,我在 Windows 上也感到厌烦。
但是编译到一半就报错了
'DUCKDB~2/duckdb/THIRD_~1/catch/catch.hpp:1445:96:
错误:ISO C++ 禁止指针和整数比较[-fpermissive]auto compareNotEqual( LhsT const& lhs, RhsT&& rhs ) -> bool { return static_cast<bool>(lhs != rhs); }'
由于我怀疑duckdb 的创建者确实把这件事搞砸了,我认为尝试将C 文件编译为C++ 文件时可能会出现编译器错误。
我的主要问题是:如何在 windows 上配置 make 命令以阻止它产生此错误?
我在安装了 gcc 5.1 和当前 cmake 的 Windows 7 和 10 系统上都尝试过,但都产生了这个错误。
编辑:这是完整的错误文本
[ 87%] 构建 CXX 对象 test/sql/capi/CMakeFiles/test_sql_capi.dir/ub_test_sql_capi.cpp.obj 在 C:/duckdb/test/sql/capi/test_capi.cpp:1:0 包含的文件中, 来自 test_capi.cpp:0:
C:/DUCKDB~2/duckdb/THIRD_~1/catch/catch.hpp: 在 'bool >Catch::compareNotEqual(const LhsT&, RhsT&&) [with LhsT = void*; RhsT = const >long long int&]':
C:/DB/DUCKDB~2/duckdb/THIRD_~1/catch/catch.hpp:1471:37: 需要来自 'const >Catch::BinaryExpr Catch::ExprLhs::operator!=(const >RhsT& ) [with RhsT = long long int; LhsT = void* const&]'
C:/DB/duckdb/test/sql/capi/test_capi.cpp:332:2:从这里需要 C:/DB/DUCKDB~2/duckdb/THIRD_~1/catch/catch.hpp:1445:96:错误:ISO C++禁止比较>指针和整数[-fpermissive] auto compareNotEqual(LhsT const& lhs, RhsT&& rhs) -> bool { return >static_cast(lhs != rhs); }
我只在路径等中编辑了我的用户名。
【问题讨论】:
-
错误消息(C++ 禁止在指针和整数之间进行比较)似乎很清楚
C++的规则已被破坏。C和C++是不同的语言,具有不同的规则。 如何在 Windows 上配置 make 命令以阻止它产生此错误? 使违规代码符合C++:) -
有问题的文件似乎是 Catch2 克隆的一部分,并且似乎仅用于库中的测试。您应该能够在没有测试的情况下构建它。或者,错误消息应该告诉您是哪个测试
.cpp文件导致了错误。 (你不是把所有的行都复制了吗?)然后你可以看看有没有问题。有问题的代码显然是 C++,而不是 C。所以这不是问题。 -
@uneven_mark 我认为这不是问题所在。错误消息只是不完整。它看起来像是来自项目其他部分实例化的 catch 库中的模板
-
@PeterT 我并不是说 Catch2 有问题,只是它是错误表现的地方。
-
@nada 这是一个错误,而不是警告。而且我不会在标志中添加
-fpermissive。