First of all: much apologies for the noise! I did solve my problem: While the stuff i presented was right (probably not the most natural CP-usage; but i'm still learning), i made a mistake when i modified my Makefile (= my own steps deviated from the presentation in this mail).
The problem was indeed the ordering of linking, which is explained at the guide under 2.3.3. My wrongly used Makefile did link to float before minimodel, which seems to be the problem. (the original gist i used did not link to float and my first attempt adding -lgecodefloat was ignoring the ordering-rules mentioned in the guide; maybe a simple schematic Makefile could be added) The Makefile presented in my question at this mailing-list was correct (-lgecodefloat between -lgecodeset and -lgecodeint) and compiles. - Sascha-Dominic Schnug Gesendet: Dienstag, 28. März 2017 um 02:14 Uhr Von: "Sascha Schnug" <saschasch...@web.de> An: users@gecode.org Betreff: [gecode-users] Problem with linear constraint over integers using minimodel ("undef ref") Hi, i'm a new user of Gecode and i have some trouble. I'm using Gecode 5.0, compiled with the defaults plus gmp & mpfr (although i don't think it's needed for my case) under Windows using Cygwin (gcc/g++: 5.4). (If i recall correctly; i needed to manually modify the 3rd-party code where the rounding-mode is selected). While i made good progress at first (despite the fact that i'm rediscovering C++), the following part of my code is not working: Excerpt: -------- #include <gecode/int.hh> #include <gecode/search.hh> #include <gecode/minimodel.hh> #include <gecode/float.hh> // for later use using Gecode; protected: IntVarArray q_start; IntVarArray q_end; IntVarArray q_length; public: IntVarArgs q_start_; IntVarArgs q_end_; IntVarArgs q_length_; .......... for(int i=0; i<n_q; i++) { q_start_ << IntVar(*this, 0, 95); q_end_ << IntVar(*this, 0, 95); q_length_ << IntVar(*this, 0, 95); } q_start = IntVarArray(*this, q_start_); q_end = IntVarArray(*this, q_end_); q_length = IntVarArray(*this, q_length_); .......... for(int q=0; q<n_q; ++q) { // get length of window / THIS SEEMS TO BE THE PROBLEM! rel(*this, 1*q_length[q] == 1*q_end[q] - 1*q_start[q]); // minimodel-like } I think this follows the examples in the guide as well as other resources. My Makefile looks like this (following https://gist.github.com/fepa/2187179; also uses the order mentioned in guide): # Configure this makefile if needed then run # $ make all # to compile and link # What files to compile OBJS=problem.cpp solver.cpp # What file to compile to MAINFILE=solver # What compiler to use CC=g++ # Where is your gecode library? # (Gecode's default 'make install' behavior installs gecode libraries and headers under /usr/local) GECODEDIR=/usr/local # 'make all' does both compiling and link (i.e 'make compile link') all: compile link # 'make compile' compiles files compile: $(OBJS) $(CC) -I$(GECODEDIR)/include -c $(OBJS) # 'make link' links compiled files link: $(OBJS) $(CC) -o $(MAINFILE) -L$(GECODEDIR)/lib $(MAINFILE).o \ -lgecodeflatzinc -lgecodedriver \ -lgecodesearch -lgecodeminimodel -lgecodeset \ -lgecodefloat \ -lgecodeint -lgecodekernel -lgecodesupport # 'make clean' cleans up generated files from make commands clean: rm -rf *o $(MAINFILE) Now this is the ugly output i receive: $ make g++ -I/usr/local/include -c solver_v4.cpp -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC g++ -o solver_v4 -L/usr/local/lib solver_v4.o \ -lgecodeflatzinc -lgecodedriver -lgecodefloat \ -lgecodesearch -lgecodeminimodel -lgecodeset \ -lgecodeint -lgecodekernel -lgecodesupport /usr/local/lib/libgecodeminimodel.a(float-expr.o): In function `Gecode::LinFloatExpr::post(Gecode::Home) const': /cygdrive/x/gecode-5.0.0/gecode-5.0.0/gecode/minimodel/float-expr.cpp:220: undefined reference to `Gecode::Float::Linear::estimate(Gecode::Float::Linear::Term*, int, Gecode::FloatVal, double&, double&)' /cygdrive/x/gecode-5.0.0/gecode-5.0.0/gecode/minimodel/float-expr.cpp:220:(.text+0x3df3): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `Gecode::Float::Linear::estimate(Gecode::Float::Linear::Term*, int, Gecode::FloatVal, double&, double&)' /cygdrive/x/gecode-5.0.0/gecode-5.0.0/gecode/minimodel/float-expr.cpp:223: undefined reference to `Gecode::Float::Linear::post(Gecode::Home, Gecode::Float::Linear::Term*, int, Gecode::FloatRelType, Gecode::FloatVal)' /cygdrive/x/gecode-5.0.0/gecode-5.0.0/gecode/minimodel/float-expr.cpp:223:(.text+0x4029): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `Gecode::Float::Linear::post(Gecode::Home, Gecode::Float::Linear::Term*, int, Gecode::FloatRelType, Gecode::FloatVal)' /usr/local/lib/libgecodeminimodel.a(float-expr.o): In function `Gecode::LinFloatExpr::post(Gecode::Home, Gecode::FloatRelType, Gecode::BoolVar const&) const': /cygdrive/x/gecode-5.0.0/gecode-5.0.0/gecode/minimodel/float-expr.cpp:205: undefined reference to `Gecode::Float::Linear::post(Gecode::Home, Gecode::Float::Linear::Term*, int, Gecode::FloatRelType, Gecode::FloatVal, Gecode::Reify)' /cygdrive/x/gecode-5.0.0/gecode-5.0.0/gecode/minimodel/float-expr.cpp:205:(.text+0x4277): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `Gecode::Float::Linear::post(Gecode::Home, Gecode::Float::Linear::Term*, int, Gecode::FloatRelType, Gecode::FloatVal, Gecode::Reify)' /usr/local/lib/libgecodeminimodel.a(float-expr.o): In function `Gecode::LinFloatExpr::post(Gecode::Home, Gecode::FloatRelType) const': /cygdrive/x/gecode-5.0.0/gecode-5.0.0/gecode/minimodel/float-expr.cpp:182: undefined reference to `Gecode::Float::Linear::post(Gecode::Home, Gecode::Float::Linear::Term*, int, Gecode::FloatRelType, Gecode::FloatVal)' /cygdrive/x/gecode-5.0.0/gecode-5.0.0/gecode/minimodel/float-expr.cpp:182:(.text+0x468d): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `Gecode::Float::Linear::post(Gecode::Home, Gecode::Float::Linear::Term*, int, Gecode::FloatRelType, Gecode::FloatVal)' collect2: error: ld returned 1 exit status make: *** [Makefile:24: link] Error 1 I'm kinda lost right now as i have no idea what the problem is. I did not check Gecode's sources yet. My makefile uses some of GCC's STL-debugging tools, but they are not the reason for this. Another remark: In my previous compilation (without gmp + mpfr; added now) i build all the examples too. -> all examples using float & minimodel are behaving strange: => they all seem to run without errors, but do not produce any output (clean shell) I did not research the Script-like usage of gecode a lot, but i expect those examples should produce output too like all the others. Thanks for taking the time to read this! I hope i did not forget to mention relevant information. - Sascha-Dominic Schnug _______________________________________________ Gecode users mailing list users@gecode.org https://www.gecode.org/mailman/listinfo/gecode-users[https://www.gecode.org/mailman/listinfo/gecode-users] _______________________________________________ Gecode users mailing list users@gecode.org https://www.gecode.org/mailman/listinfo/gecode-users