【问题标题】:External header file ilcplex\cpxconst.h causing causing compiler error外部头文件 ilcplex\cpxconst.h 导致编译器错误
【发布时间】:2020-04-13 05:48:24
【问题描述】:

我收到了一个用 C 语言构建的程序的代码,该程序使用强化学习算法。我需要修改它,但我在编译代码时遇到了困难。这是 CodeBlocks 中的输出。

所有错误都来自头文件中的一行代码,该文件是 IBM CPLEX 包含目录 (include\cplex\cpxconst.h) 的一部分

有问题的代码行如下。

define CPXDEPRECATEDAPI(version) __declspec(dllimport deprecated)

错误消息是多种类型的语法错误,例如:error: 预期标识符或 '(' before ')' 标记

每个错误都有注释:文件ilcplex\cplex.h中的多行代码

我在 Windows 10 中使用 CodeBlock CPLEX 版本是 12.9.0

完整的错误消息

||=== 构建:在 SWEM2020 中发布(编译器:GNU GCC 编译器)===| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1194|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1194|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1200|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1200|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1231|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\swemextras.h|16|错误:'trunc' 的类型冲突| c:\mingw\include\math.h|820|注意:'trunc' 的先前声明在这里| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1194|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1194|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1200|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1200|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1231|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1231|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1237|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1237|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1242|注意:在宏“CPXDEPRECATEDAPI”的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1242|注意:在宏“CPXDEPRECATEDAPI”的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1597|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1597|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_genetic1.c||在函数'GeneticAlgorithm1'中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_genetic1.c|64|警告:格式参数过多 [-Wformat-extra-args]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_genetic1.c|67|警告:未使用的变量 'lostLoad' [-Wunused-variable]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\dlist.c|137|错误:“InsertInOrder_dlist”的类型冲突| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\dlist.h|19|注意:“InsertInOrder_dlist”的先前声明在这里| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1231|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1237|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1237|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1242|注意:在宏“CPXDEPRECATEDAPI”的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1242|注意:在宏“CPXDEPRECATEDAPI”的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:在 'deprecated' 之前预期的 ')'| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1597|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cpxconst.h|243|错误:预期标识符或 '(' before ')' token| C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include\ilcplex\cplex.h|1597|注意:在宏'CPXDEPRECATEDAPI'的扩展中| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\swemextras.h|16|错误:'trunc' 的类型冲突| c:\mingw\include\math.h|820|注意:'trunc' 的先前声明在这里| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c||在函数“RFAlgorithm1”中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|183|警告:格式参数过多 [-Wformat-extra-args]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|185|警告:未使用的变量 'lostLoad' [-Wunused-variable]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c||在函数“Alg_MERwFirms_MustRun”中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|466|警告:未使用的变量 'lostLoad' [-Wunused-variable]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c||在函数“Alg_MERwFirms”中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|727|警告:格式参数过多 [-Wformat-extra-args]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|729|警告:未使用的变量 'lostLoad' [-Wunused-variable]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c||在函数“Alg_MERwFirmsSoftmax”中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|934|警告:格式参数过多 [-Wformat-extra-args]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|936|警告:未使用的变量 'lostLoad' [-Wunused-variable]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c||在函数“Alg_ERSspilloverwFirms”中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|1179|警告:格式参数过多 [-Wformat-extra-args]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|1181|警告:未使用的变量 'lostLoad' [-Wunused-variable]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c||在函数“Alg_ERSpilloverwFirmsSoftmax”中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|1393|警告:格式参数过多 [-Wformat-extra-args]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|1395|警告:未使用的变量 'lostLoad' [-Wunused-variable]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c||在函数“RFAlgorithm”中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|1573|警告:格式参数过多 [-Wformat-extra-args]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|1575|警告:未使用的变量 'lostLoad' [-Wunused-variable]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c||在函数“RFAlgorithmM”中:| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|1784|警告:格式参数过多 [-Wformat-extra-args]| C:\Users\Tingle\OneDrive\Documents\Coding\SWEM2020\alg_rf.c|1786|警告:未使用的变量 'lostLoad' [-Wunused-variable]| ||=== 构建失败:27 个错误,17 个警告(0 分钟,2 秒)===|

【问题讨论】:

  • 您使用的是什么操作系统?什么版本的 CPLEX?你能显示更完整的错误信息吗?
  • 我已经添加了完整的错误信息。我在 Windows 10 CPLEX 版本是 12.9.0 中使用 CodeBlocks,在 MinGW 中编译。

标签: header deprecated cplex


【解决方案1】:

这个答案和我在这里给出的答案非常相似:C++: Cplex/cp optimizer makefile issues on project build using Clion with MinGW and g++ compiler

CPLEX detailed system requirements(单击“版本 12.9.0”>“Windows”>“先决条件”)表明 Visual Studio 2015-2019 是 Windows 上唯一受支持的编译器。

如果我们查看cpxconst.h,第 243 行(来自您的错误消息),我们会看到有问题的代码:

#   if defined(_WIN32) && !defined(BUILD_CPXSTATIC)
#      define CPXLIBAPI __declspec(dllimport)
#      define CPXDEPRECATEDAPI(version) __declspec(dllimport deprecated)
#      define CPXDEPRECATED(version) __declspec(deprecated)
...
#   endif

基于此,您的 MinGW gcc 似乎定义了 _WIN32,并且它以仅与 Microsoft Visual C 兼容的方式定义了 CPXDEPRECATEDAPI

您可以将CPXDEPRECATEDAPI 的定义替换为无操作(即编辑cpxconst.h,如下所示:

#      define CPXDEPRECATEDAPI(version)

但是,您很可能最终会遇到一些其他错误。

在 Windows 上,您应该只使用 Visual Studio 2015 或更高版本,或者考虑使用WSL

【讨论】:

  • 您可以通过将-DBUILD_CPXSTATIC 添加到编译器标志来编译mingw-w64 上的绑定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2021-09-06
  • 1970-01-01
相关资源
最近更新 更多