coin-or / Bonmin

Basic Open-source Nonlinear Mixed INteger programming
https://coin-or.github.io/Bonmin
Eclipse Public License 1.0
121 stars 22 forks source link

Compiling Error #29

Closed chemrgineer closed 1 year ago

chemrgineer commented 3 years ago

I installed IPOPT (3.14.3) with HSL (academic license) by compiling, and Cbc and dev package installed from Debian repository. I am trying to compile Bonmin on WSL2 with Intel CPU. I get these errors:

In file included from ../../../../src/Algorithms/OaGenerators/../../Interfaces/BonOsiTMINLPInterface.hpp:22, from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.hpp:13, from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.cpp:10: /usr/local/include/coin-or/CoinWarmStartBasis.hpp:39:46: error: expected initializer before ‘:’ token 39 | class COINUTILSLIB_EXPORT CoinWarmStartBasis : public virtual CoinWarmStart { | ^ /usr/local/include/coin-or/CoinWarmStartBasis.hpp:350:8: error: ‘CoinWarmStartBasis’ does not name a type; did you mean ‘CoinWarmStartBasis_H’? 350 | inline CoinWarmStartBasis::Status getStatus(const char array, int i) | ^~~~~~ | CoinWarmStartBasis_H /usr/local/include/coin-or/CoinWarmStartBasis.hpp:360:43: error: ‘CoinWarmStartBasis’ has not been declared 360 | inline void setStatus(char array, int i, CoinWarmStartBasis::Status st) | ^~~~~~ /usr/local/include/coin-or/CoinWarmStartBasis.hpp:360:70: error: expected ‘,’ or ‘...’ before ‘st’ 360 | inline void setStatus(char array, int i, CoinWarmStartBasis::Status st) | ^~ /usr/local/include/coin-or/CoinWarmStartBasis.hpp: In function ‘void setStatus(char, int, int)’: /usr/local/include/coin-or/CoinWarmStartBasis.hpp:364:44: error: ‘st’ was not declared in this scope; did you mean ‘std’? 364 | st_byte = static_cast< char >(st_byte | (st << ((i & 3) << 1))); | ^~ | std /usr/local/include/coin-or/CoinWarmStartBasis.hpp: At global scope: /usr/local/include/coin-or/CoinWarmStartBasis.hpp:370:24: error: ‘CoinWarmStartBasis’ has not been declared 370 | const char statusName(CoinWarmStartBasis::Status status); | ^~~~~~ /usr/local/include/coin-or/CoinWarmStartBasis.hpp:376:19: error: ‘CoinWarmStartBasis’ has not been declared 376 | char statusToChar(CoinWarmStartBasis::Status status); | ^~~~~~ /usr/local/include/coin-or/CoinWarmStartBasis.hpp:378:1: error: ‘CoinWarmStartBasis’ does not name a type; did you mean ‘CoinWarmStartBasis_H’? 378 | CoinWarmStartBasis::Status charToStatus(char status); | ^~~~~~ | CoinWarmStartBasis_H /usr/local/include/coin-or/CoinWarmStartBasis.hpp:404:24: error: expected initializer before ‘:’ token 404 | CoinWarmStartBasisDiff : public virtual CoinWarmStartDiff | ^ In file included from ../../../../src/Algorithms/OaGenerators/../../Interfaces/BonTNLPSolver.hpp:20, from ../../../../src/Algorithms/OaGenerators/../../Interfaces/BonCutStrengthener.hpp:13, from ../../../../src/Algorithms/OaGenerators/../../Interfaces/BonOsiTMINLPInterface.hpp:24, from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.hpp:13, from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.cpp:10: /usr/local/include/coin-or/CoinTime.hpp:200:27: error: variable ‘COINUTILSLIB_EXPORT CoinTimer’ has initializer but incomplete type 200 | class COINUTILSLIB_EXPORT CoinTimer | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp:202:1: error: expected primary-expression before ‘private’ 202 | private: | ^~~ /usr/local/include/coin-or/CoinTime.hpp:202:1: error: expected ‘}’ before ‘private’ /usr/local/include/coin-or/CoinTime.hpp:201:1: note: to match this ‘{’ 201 | { | ^ /usr/local/include/coin-or/CoinTime.hpp:202:1: error: expected ‘,’ or ‘;’ before ‘private’ 202 | private: | ^~~ /usr/local/include/coin-or/CoinTime.hpp:213:1: error: expected unqualified-id before ‘private’ 213 | private: | ^~~ /usr/local/include/coin-or/CoinTime.hpp:241:46: error: non-member function ‘double evaluate(double)’ cannot have cv-qualifier 241 | inline double evaluate(const double d_tmp) const | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp:247:1: error: expected unqualified-id before ‘public’ 247 | public: | ^~ /usr/local/include/coin-or/CoinTime.hpp:261:3: error: ISO C++ forbids declaration of ‘CoinTimer’ with no type [-fpermissive] 261 | CoinTimer(double lim) | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp: In function ‘int CoinTimer(double)’: /usr/local/include/coin-or/CoinTime.hpp:262:7: error: only constructors take member initializers 262 | : start(CoinCpuTime()) | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp:264:11: error: ‘start’ was not declared in this scope 264 | , end(start + lim) | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp:270:3: warning: no return statement in function returning non-void [-Wreturn-type] 270 | } | ^ /usr/local/include/coin-or/CoinTime.hpp: In function ‘void restart()’: /usr/local/include/coin-or/CoinTime.hpp:299:5: error: ‘start’ was not declared in this scope; did you mean ‘restart’? 299 | start = CoinCpuTime(); | ^~~~~ | restart /usr/local/include/coin-or/CoinTime.hpp: At global scope: /usr/local/include/coin-or/CoinTime.hpp:313:41: error: non-member function ‘bool isPastPercent(double)’ cannot have cv-qualifier 313 | inline bool isPastPercent(double pct) const | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp: In function ‘bool isPastPercent(double)’: /usr/local/include/coin-or/CoinTime.hpp:315:21: error: ‘start’ was not declared in this scope; did you mean ‘restart’? 315 | return evaluate(start + limit pct < CoinCpuTime()); | ^~~~~ | restart /usr/local/include/coin-or/CoinTime.hpp: At global scope: /usr/local/include/coin-or/CoinTime.hpp:319:34: error: non-member function ‘bool isPast(double)’ cannot have cv-qualifier 319 | inline bool isPast(double lim) const | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp: In function ‘bool isPast(double)’: /usr/local/include/coin-or/CoinTime.hpp:321:21: error: ‘start’ was not declared in this scope; did you mean ‘restart’? 321 | return evaluate(start + lim < CoinCpuTime()); | ^~~~~ | restart /usr/local/include/coin-or/CoinTime.hpp: At global scope: /usr/local/include/coin-or/CoinTime.hpp:325:27: error: non-member function ‘bool isExpired()’ cannot have cv-qualifier 325 | inline bool isExpired() const | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp:331:28: error: non-member function ‘double timeLeft()’ cannot have cv-qualifier 331 | inline double timeLeft() const | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp:337:31: error: non-member function ‘double timeElapsed()’ cannot have cv-qualifier 337 | inline double timeElapsed() const | ^~~~~ /usr/local/include/coin-or/CoinTime.hpp: In function ‘double timeElapsed()’: /usr/local/include/coin-or/CoinTime.hpp:339:37: error: ‘start’ was not declared in this scope; did you mean ‘restart’? 339 | return evaluate(CoinCpuTime() - start); | ^~~~~ | restart /usr/local/include/coin-or/CoinTime.hpp: At global scope: /usr/local/include/coin-or/CoinTime.hpp:347:1: error: expected declaration before ‘}’ token 347 | }; | ^ In file included from ../../../../src/Algorithms/OaGenerators/BonOAMessages.hpp:13, from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.hpp:14, from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.cpp:10: /usr/local/include/coin-or/CoinMessage.hpp:78:39: error: expected initializer before ‘:’ token 78 | class COINUTILSLIBEXPORT CoinMessage : public CoinMessages { | ^ In file included from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.cpp:12: /usr/include/coin/CbcModel.hpp:2803:22: error: field ‘bestSolutionBasis’ has incomplete type ‘CoinWarmStartBasis’ 2803 | CoinWarmStartBasis bestSolutionBasis; | ^~~~~~ In file included from /usr/include/coin/CbcNode.hpp:15, from /usr/include/coin/CbcCompareBase.hpp:21, from /usr/include/coin/CbcModel.hpp:15, from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.cpp:12: /usr/include/coin/CbcNodeInfo.hpp:24:7: note: forward declaration of ‘class CoinWarmStartBasis’ 24 | class CoinWarmStartBasis; | ^~~~~~ In file included from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.cpp:12: /usr/include/coin/CbcModel.hpp:3147:22: error: field ‘workingBasis’ has incomplete type ‘CoinWarmStartBasis’ 3147 | CoinWarmStartBasis workingBasis_; | ^~~~~ In file included from /usr/include/coin/CbcNode.hpp:15, from /usr/include/coin/CbcCompareBase.hpp:21, from /usr/include/coin/CbcModel.hpp:15, from ../../../../src/Algorithms/OaGenerators/BonOaNlpOptim.cpp:12: /usr/include/coin/CbcNodeInfo.hpp:24:7: note: forward declaration of ‘class CoinWarmStartBasis’ 24 | class CoinWarmStartBasis; | ^~~~~~ make[2]: [Makefile:507: BonOaNlpOptim.lo] Error 1 make[2]: Leaving directory '/home/optimization/Bonmin/build/src/Algorithms/OaGenerators' make[1]: [Makefile:560: all-recursive] Error 1 make[1]: Leaving directory '/home/optimization/Bonmin/build/src/Algorithms' make: *** [Makefile:461: all-recursive] Error 1

I'm sorry If done wrong error posting. Thanks.

svigerske commented 3 years ago

The master, i.e., development, branch of Bonmin assumes that CoinUtils (and all of Cbc) has been build from their development branches. The version that comes with Debian is too old for that.

Maybe this helps: https://coin-or.github.io/user_introduction#linux-1

chemrgineer commented 3 years ago

Some of my packages and versions: coinor-cbc/stable,now 2.10.5+ds1-3 amd64 [installed] coinor-clp/stable,now 1.17.5+repack1-1 amd64 [installed] coinor-libcbc-dev/stable,now 2.10.5+ds1-3 amd64 [installed] coinor-libcbc3/stable,now 2.10.5+ds1-3 amd64 [installed,automatic] coinor-libcgl-dev/stable,now 0.60.3+repack1-2 amd64 [installed] coinor-libcgl1/stable,now 0.60.3+repack1-2 amd64 [installed,automatic] coinor-libclp-dev/stable,now 1.17.5+repack1-1 amd64 [installed,automatic] coinor-libclp1/stable,now 1.17.5+repack1-1 amd64 [installed,automatic] coinor-libcoinutils-dev/stable,now 2.11.4+repack1-1 amd64 [installed,automatic] coinor-libcoinutils3v5/stable,now 2.11.4+repack1-1 amd64 [installed,automatic] coinor-libosi-dev/stable,now 0.108.6+repack1-2 amd64 [installed,automatic] coinor-libosi1v5/stable,now 0.108.6+repack1-2 amd64 [installed,automatic] coreutils/stable,now 8.32-4+b1 amd64 [installed] libClpSolver.so.1.14.5 libOsiClp.so.1.14.5 libCbcSolver.so.3.10.5 libCgl.so.1.10.3 libCoinUtils.so.3.11.4 libOsi.so.1.13.6 I tried to keep them updated. Thanks for help.

svigerske commented 1 year ago

There are no releases of CoinUtils, etc, that the Bonmin development version would work with. Either build the development versions of Bonmin and its dependencies, or use the last Bonmin release.