【问题标题】:rint() issue after creating VS Project using CMake使用 CMake 创建 VS 项目后的 rint() 问题
【发布时间】:2016-06-04 09:08:16
【问题描述】:

我在编译代码时遇到问题 - 特别是 METIS - Serial Graph Partitioning and Fill-reducing Matrix Ordering

我已经成功地通过两种方式从源文件中制作了 Visual Studio 2013 项目:使用 CMake GUI(版本 3.4.3)和使用命令行。

但是,在这两种情况下,当我尝试在 Visual Studio 中构建创建的项目时,我都会收到错误消息:Error C2059: syntax error : '(' on line

_CRTIMP double __cdecl rint(_In_ double _X);

_CRTIMP 是这样定义的:

#define _CRTIMP __declspec(dllimport)

这个问题是CMake创建Visual Studio Project的过程中引起的,还是METIS源文件的问题?

【问题讨论】:

  • 嗯,搜索一下metis源码呢?
  • 我试图搜索源代码,但没有找到可能的错误。我不明白,为什么提到的行上的“(”可能有问题。宏_CRTIMP在整个文件中被多次使用,rint()是默认函数,定义为#define rint(x) ((int)((x)+0.5))
  • 我不知道,这确实是在黑暗中刺伤,但请注意 VS,尤其是在旧版本中,根本不兼容 C99。
  • @T.Brown 好吧,如果rint(x) 真的是一个宏,那么它当然不会编译...给定的行被预处理器扩展为:__declspec(dllimport) double __cdecl ((int)((_In_ double _X)+0.5));
  • 另外,正如 Marcus 所说,VisualC++ 是一个 C++ 编译器。您可能需要一个 C 编译器来编译 C 。我之前也尝试过使用 Visual C++ 编译标准 C 或 GNU C,但在经历了很多挫折后放弃了。祝你好运。

标签: c visual-c++ cmake c99 cmake-gui


【解决方案1】:

转到:metis\GKlib\gk_arch.h 和 metisbin.h 和 metislib.h。删除或重命名 #define rint(x) ((idx_t)((x)+0.5)) 它会导致与 math.h 中的 rint 函数发生冲突。

【讨论】:

    【解决方案2】:

    只在metis\GKlib\gk_arch.h 中注释掉#define rint(x) ((idx_t)((x)+0.5)) 行就足够了。

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2023-03-10
      • 2012-07-07
      • 2018-03-26
      • 1970-01-01
      相关资源
      最近更新 更多