[Lemon-user] Using Lemon with CPLEX Concert on Windows with Visual C++ 2008

Alpár Jüttner alpar at cs.elte.hu
Wed May 18 08:57:25 CEST 2011


Hi,

It's difficult for me to help, as I cannot reproduce your problem. Also,
the error log still looks quite unrelated to LEMON.

The only thing I can suggest is trying to localize the problem somehow.
For example
      * First try to compile and link a sample code using LEMON only
      * Then, try to compile and link a sample code using CPLEX only
      * Finally, if the both are working _using the same config_, then
        try using them together.

Regards,
Alpar

> Thanks for the suggestions Alpar. When I used the /NODEFAULTLIB
> (following in the instructions at
> http://msdn.microsoft.com/en-us/library/f1tbxcxh(v=vs.80).aspx)
> 
> I get different errors:
> 
> 1>------ Build started: Project: tryLemonAlone, Configuration: Release
> Win32 ------
> 1>Compiling...
> 1>main.cpp
> 1>Linking...
> 1>main.obj : error LNK2001: unresolved external symbol
> __invalid_parameter_noinfo
> 1>libcpmt.lib(cout.obj) : error LNK2001: unresolved external symbol
> __invalid_parameter_noinfo
> 1>libcpmt.lib(cerr.obj) : error LNK2001: unresolved external symbol
> __invalid_parameter_noinfo
> 1>libcpmt.lib(_tolower.obj) : error LNK2001: unresolved external
> symbol __calloc_crt
> 1>libcpmt.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol
> __malloc_crt
> 1>C:\Users\luis\Documents\singleStopProblem\tryLemonAlone\Release\tryLemonAlone.exe
> : fatal error LNK1120: 3 unresolved externals
> 1>Build log was saved at
> "file://c:\Users\luis\Documents\tryLemonAlone\tryLemonAlone\Release\BuildLog.htm"
> 1>tryLemonAlone - 6 error(s), 0 warning(s)
> ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
> 
> Here's an example of a short piece of code where Concert works with
> lemon and without it, followed by the errors. The errors I've gotten
> this time are different and more numerous, in the previous code, I was
> not actually using any Concert libraries.
> 
> I think the problem may be with how I'm trying to use GraphWriter. In
> the code shown below, if I delete the last bit of code where
> GraphWriter is called, the code compiles and runs fine. With the
> GraphWriter code included, I get the following errors:
> 
> 1>------ Build started: Project: testSingleStopAGAIN, Configuration:
> Release Win32 ------
> 1>Compiling...
> 1>main.cpp
> 1>Linking...
> 1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined
> in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(dosmap.obj) : error LNK2005: __errno already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in
> MSVCRTD.lib(cinitexe.obj)
> 1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in
> MSVCRTD.lib(cinitexe.obj)
> 1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in
> MSVCRTD.lib(cinitexe.obj)
> 1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in
> MSVCRTD.lib(cinitexe.obj)
> 1>LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl
> terminate(void)" (?terminate@@YAXXZ) already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup already
> defined in MSVCRTD.lib(crtexe.obj)
> 1>LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(setlocal.obj) : error LNK2005: __configthreadlocale
> already defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(setlocal.obj) : error LNK2005: __free_locale already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(setlocal.obj) : error LNK2005: __create_locale already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(setlocal.obj) : error LNK2005: _setlocale already defined
> in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(ctype.obj) : error LNK2005: ___pctype_func already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(initctyp.obj) : error LNK2005: ____mb_cur_max_l_func
> already defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(initctyp.obj) : error LNK2005: ____lc_codepage_func
> already defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(initctyp.obj) : error LNK2005: ____lc_handle_func already
> defined in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(lconv.obj) : error LNK2005: _localeconv already defined
> in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(atox.obj) : error LNK2005: _atoi already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(xtoas.obj) : error LNK2005: __ui64toa_s already defined
> in MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(getenv.obj) : error LNK2005: _getenv already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(tolower.obj) : error LNK2005: _tolower already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LIBCMT.lib(strtol.obj) : error LNK2005: _strtol already defined in
> MSVCRTD.lib(MSVCR90D.dll)
> 1>LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of
> other libs; use /NODEFAULTLIB:library
> 1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of
> other libs; use /NODEFAULTLIB:library
> 1>C:\Users\luis\Documents\testSingleStopAGAIN\Release\testSingleStopAGAIN.exe
> : fatal error LNK1169: one or more multiply defined symbols found
> 1>Build log was saved at
> "file://c:\Users\luis\Documents\testSingleStopAGAIN\Release\BuildLog.htm"
> 1>testSingleStopAGAIN - 34 error(s), 2 warning(s)
> ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
> 
> 
> 
> 
> 
> #include <ilcplex/ilocplex.h>
> #include <ctime>
> #include <sstream>
> 
> #include <lemon/list_graph.h>
> #include <lemon/lgf_reader.h>
> #include <lemon/lgf_writer.h>
> 
> 
> ILOSTLBEGIN
> 
> using namespace std;
> using namespace lemon;
> 
> int main() {
>   IloEnv env;
>   return 0;
> 
>   int nDemand = 12;
>   int nVehicles = 6;
>   int nDays = 2;
>   cout << "hello there " << endl;
>   //write the graph file
>   ofstream graphFile("g.lgf");
>   if(!graphFile) {
>     cout << "Cannot open graph file.\n";
>     return 1;
>   }
> 
> 
> 
>   graphFile << "@nodes" << endl << "label" << endl;
> 
>   for(int i = 0; i < nDemand+nVehicles; i++) {
>     graphFile << i << endl;
>   }
>   graphFile << "@edges" << endl << endl;
>   graphFile << "   label capacity" << endl;
>   int m = 0;
>   for(int i = 0; i < nDemand; i++) {
>     for(int k = 0; k < nVehicles; k++) {
>       m++;
>       graphFile << i << "  " << k+nDemand << "  "  << m  << "  "  << "
>  " << 1 << endl;
>     }
>   }
>   graphFile.close();
> 
>   ListGraph g;
>   ListGraph::EdgeMap<int> weight(g);
>   ListGraph::NodeMap<int> available(g);
>   ListGraph::NodeMap<int> assigned(g);
> 
> 
>   try {
>     GraphReader<ListGraph>(g, "g.lgf").
>       edgeMap("capacity", weight).
>       run();
>   } catch (Exception& error) { // check if there was any error
>     std::cerr << "Error: " << error.what() << std::endl;
>     return -1;
>   }
> 
>   try {
>     GraphWriter<ListGraph>(g, cout).
>       edgeMap("capacity", weight).
>       run();
>   } catch (Exception& error) { // check if there was any error
>     std::cerr << "Error: " << error.what() << std::endl;
>     return -1;
>   }
> 
> }
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> On Sun, May 15, 2011 at 3:52 AM, Alpár Jüttner <alpar at cs.elte.hu> wrote:
> > Hi,
> >
> >> I'm trying to use Lemon and CPLEX Concert in the same code. I'm
> >> running into linker problems. Concert has a number of settings in its
> >> installation instructions, and after adding and removing them one by
> >> one the culprit seems to be setting the runtime library to
> >> multi-threaded (/MT).
> >
> > I do not believe this problem has anything to do with LEMON.
> > Also, the conflicting libs in the error message are unrelated to LEMON.
> >
> > Can you show an example code using CPLEX Concert and MT which compiles
> > and links without LEMON, but not with it?
> >
> > Regards,
> > Alpar
> >
> > P.S. Btw, have you tried using the compiler option /NODEFAULTLIB:library
> > as it is suggested by the error log you sent?
> >
> >> Below are the linker errors I'm getting, and the code that gives me
> >> these errors when I try to link. Without the the change of runtime
> >> library to multi-threaded, the code compiles and runs correctly.
> >>
> >> Does anyone know what settings I should be using to use CPLEX together
> >> with Lemon?
> >>
> >> Thank you,
> >>
> >> Luis de la Torre
> >>
> >>
> >> 1>------ Build started: Project: tryLemonAlone, Configuration: Release
> >> Win32 ------
> >> 1>Compiling...
> >> 1>main.cpp
> >> 1>Linking...
> >> 1>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall
> >> type_info::type_info(class type_info const &)"
> >> (??0type_info@@AAE at ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
> >> 1>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info
> >> & __thiscall type_info::operator=(class type_info const &)"
> >> (??4type_info@@AAEAAV0 at ABV0@@Z) already defined in
> >> LIBCMT.lib(typinfo.obj)
> >> 1>LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of
> >> other libs; use /NODEFAULTLIB:library
> >> 1>C:\Users\luis\Documents\tryLemonAlone\Release\tryLemonAlone.exe :
> >> fatal error LNK1169: one or more multiply defined symbols found
> >> 1>Build log was saved at
> >> "file://c:\Users\luis\Documents\tryLemonAlone\tryLemonAlone\Release\BuildLog.htm"
> >> 1>tryLemonAlone - 3 error(s), 1 warning(s)
> >> ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
> >>
> >>
> >>
> >>
> >> This tiny piece of code:
> >>
> >> #include <iostream>
> >> #include <lemon/list_graph.h>
> >> #include <lemon/lgf_reader.h>
> >> #include <lemon/lgf_writer.h>
> >>
> >> using namespace lemon;
> >> using namespace std;
> >>
> >> int main() {
> >>   int nDemand = 12;
> >>   int nVehicles = 6;
> >>   int nDays = 2;
> >>   cout << "hello there " << endl;
> >>   //write the graph file
> >>   ofstream graphFile("g.lgf");
> >>   if(!graphFile) {
> >>     cout << "Cannot open graph file.\n";
> >>     return 1;
> >>   }
> >>   graphFile << "@nodes" << endl << "label" << endl;
> >>
> >>   for(int i = 0; i < nDemand+nVehicles; i++) {
> >>     graphFile << i << endl;
> >>   }
> >>   graphFile << "@edges" << endl << endl;
> >>   graphFile << "   label capacity" << endl;
> >>   int m = 0;
> >>   for(int i = 0; i < nDemand; i++) {
> >>     for(int k = 0; k < nVehicles; k++) {
> >>       m++;
> >>       graphFile << i << "  " << k+nDemand << "  "  << m  << "  "  << "
> >>  " << 1 << endl;
> >>     }
> >>   }
> >>   graphFile.close();
> >>
> >>   ListGraph g;
> >>   ListGraph::EdgeMap<int> weight(g);
> >>   ListGraph::NodeMap<int> available(g);
> >>   ListGraph::NodeMap<int> assigned(g);
> >>
> >>   try {
> >>     GraphReader<ListGraph>(g, "g.lgf").
> >>       edgeMap("capacity", weight).
> >>       run();
> >>   } catch (Exception& error) { // check if there was any error
> >>     std::cerr << "Error: " << error.what() << std::endl;
> >>     return -1;
> >>   }
> >>   try {
> >>     GraphWriter<ListGraph>(g, std::cout).
> >>       edgeMap("capacity", weight).
> >>       run();
> >>   } catch (Exception& error) { // check if there was any error
> >>     std::cerr << "Error: " << error.what() << std::endl;
> >>     return -1;
> >>   }
> >>
> >>   for(ListGraph::NodeIt it(g); it != INVALID; ++it) {
> >>     cout << g.id(it) << endl;
> >>   }
> >>
> >>   return 0;
> >> }
> >> _______________________________________________
> >> Lemon-user mailing list
> >> Lemon-user at lemon.cs.elte.hu
> >> http://lemon.cs.elte.hu/mailman/listinfo/lemon-user
> >>
> >
> >
> >
> 





More information about the Lemon-user mailing list