[CoinBinary] Building JNI-based under MinGW

acw at ascent.com acw at ascent.com
Thu Jul 19 10:15:16 EDT 2012


With your kind help and advice, we have now succeeded in building our 
application under MinGW against the libraries provided by the CoinBinary 
project, and running it on a 32-bit Windows XP platform.  Using the 
SjLj-based compiler was key; after that there were only minor difficulties 
in getting the compiler options correct to meet the Java Native 
Interface's expectations.

Our next step is to do the same thing on a 64-bit Windows 7 platform. 
Under http://www.coin-or.org/download/binary/CoinAll/, I had hoped to find 
something like COIN-OR-1.6.0-win64-mingw-gcc..., but I can't see anything 
like that there.

Have the CoinAll binaries been built under MinGW on a 64-bit platform?  Or 
will we have to try to do it from sources?  We would, of course, prefer to 
have binaries.



From:
Ted Ralphs <ted at Lehigh.EDU>
To:
acw at ascent.com
Cc:
CoinBinary at list.coin-or.org
Date:
06/29/2012 04:09 PM
Subject:
Re: [CoinBinary] Missing library, building example under MinGW



On the MinGW side, what you are running into is likely an incompatibility 
with compiler versions. I built the MinGW libraries with the only version 
of MinGW GCC that I was ever able to get to reliably build the entire 
CoinAll suite. If I'm not mistaken, the binaries for that version are 
still available here:

http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/Previous%20Testing_%20gcc-4.2.1-sjlj%20-2/


I guess that a lot of these problems will go away if you use this version 
of the compiler. A second tip if you want to make sure you are building 
with all the right compiler options and linking all the right libraries is 
to start using pkg-config. It looks as though you can get a stand-alone 
Windows version here:

http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/

though I have never tried it. All of the projects have .pc files in 
<install_dir>/lib/pkgconfig. These files contain all dependency 
information, as well as command-line options for the compiler. You can 
easily parse these files by hand, but the dependencies are built up 
recursively, so it takes a little work and pkg-config will do that all for 
you. There is information on how to construct Makefiles that leverage 
pkg-config support here:

https://projects.coin-or.org/BuildTools/wiki/user-examples#LinkingyourCodewithCOIN-ORLibraries


I am not certain that the Applications Template examples have Makefiles 
that include support for pkg-config, but they might. Another alternative 
is that there is a file 

<install_dir>/share/coin/doc/XXX/xxx_addlibs.txt

that contains the output of running a pkg-config query for the command 
line options to link to the library of project XXX. 

Having said all of that, I think you're better off in the long-run working 
with source and building your own libraries if you know your way around 
the command line (which you seem to). If you build from source, configure 
will produce examples with custom built Makefiles that will work out of 
the box and that you can easily modify to suit your needs. If you download 
the CoinAll source distribution (or better yet, check it out from 
subversion), you will see directories <build_dir>/XXX/examples with 
automatically generated Makefiles that will build the corresponding 
examples from <src_dir>/XXX/examples. I guess we should probably just 
install the example Makefiles and sources along with the distribution...

I have been playing around with getting CoinAll to build with the latest 
and greatest version of the MinGW compilers, but if I recall, my last 
attempt still failed. Most likely, it was due to problems with the Fortran 
compiler, which may not concern you. If you just want Cbc, it should 
probably build fine. If you run into problems with another project like 
Ipopt, then you can set COIN_SKIP_PROJECTS to avoid that one or just get 
the Cbc distribution separately. I am interested in being able to build 
with the latest MinGW compilers myself, so if you are willing to give it a 
go, I will provide as much support as I can.

And yes, all of this information should be on a wiki somewhere and not 
hidden on this low-traffic mailing list :). Hope this helps!

Ted

On Fri, Jun 29, 2012 at 2:24 PM, <acw at ascent.com> wrote:
The Application Templates project looks very helpful, especially if it is 
more up-to-date.  The canned applications referred to in CoinEasy are not 
sufficient for our needs; for reasons that aren't really germane here, we 
have to add some code and call the COIN API, so we have to either build 
from source or compile against libraries. 

I don't know if, given the existence of the Applications Template project, 
it makes sense to continue to try to get the "Osiexample" build to 
complete.  I can report the next step, though.  We changed -lCoin to 
-lCoinUtils, and now at least the build does something.  What it does is 
spit out almost 4000 lines of undefined symbol errors.  These are of two 
kinds: there are the gxx_personality/SjLj errors, that indicate a mismatch 
in exception-handling technology; I'm not sure what to do about those. 
 And then there are COIN-internal symbols, which probably indicate that I 
have missing libraries in my LIB_FLAGS.  I'm guessing that new 
dependencies have appeared since this example was promulgated, but I don't 
know how to figure out which libraries to add.  Perhaps the answer to 
these questions is "Use the Application Templates instead; they are less 
moth-eaten."  Thoughts? 


From: 
Ted Ralphs <ted at Lehigh.EDU> 
To: 
acw at ascent.com 
Cc: 
CoinBinary at list.coin-or.org 
Date: 
06/29/2012 01:03 PM 
Subject: 
Re: [CoinBinary] Missing library, building example under MinGW





That seems to just be a mistake in the Makefile. It should be CoinUtils. 
There is no libCoin. This zip file is quite old and there have been 
changes that should make some of this easier, such as support for the use 
of pkg-config. Alaos, we have not been very good in general at keeping all 
of this sort of thing up to date and making it obvious and easy how to get 
started. Too much to do and not enough manpower. 

A few years back, we started another project called CoinEasy, which was 
supposed to be the single entry point for new users that explained how to 
get started, but as with everything, it has been difficult to to keep it 
up and we have not publicized it well. Nevertheless, it is probably a 
better starting point than what you're working with.

https://projects.coin-or.org/CoinEasy

There is a project called "application templates" pointed to on the 
CoinEasy page that has a more complete set of examples, Makefiles, etc. 

https://projects.coin-or.org/CoinBazaar/wiki/Projects/ApplicationTemplates

Please feel free to post additional questions and we'll try to use that as 
motivation to get some of this cleaned up :).

Cheers,

Ted

On Fri, Jun 29, 2012 at 12:46 PM, <acw at ascent.com> wrote: 
 I downloaded and installed the CoinAll binary distribution on my generic 
Windows XP desktop.  I installed MinGW first, and chose the MinGW 
distribution on the download page. 

The command-line binaries seem to work fine. 

But when I try to work the example given on the CoinBinary wiki project 
page, I run into trouble.  In particular I am trying to build the one 
called "Osiexample".  I have MinGW g++, so I'm typing "make -f 
Makefile.Osiexample".  (The NMakefile wants to use the Visual Studio 
compiler.) 

I had to adjust COIN_DIR and COIN_INC_DIR a little because the arrangement 
of directories is not exactly the same as the example expects.  This 
wasn't a problem. 

My problem is that the build fails looking for the library libCoin.a.  I 
looked in the directory win32-mingw-gcc4.2.1/lib, and it's just not there. 
 CoinMP, yes.  CoinUtils, yes.  Just plain Coin, no. 

Does anyone have a suggestion?  Thank you. 
_______________________________________________
CoinBinary mailing list
CoinBinary at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/coinbinary




-- 
Dr. Ted Ralphs
Associate Professor, Lehigh University
(610) 628-1280
ted 'at' lehigh 'dot' edu
coral.ie.lehigh.edu/~ted




-- 
Dr. Ted Ralphs
Associate Professor, Lehigh University
(610) 628-1280
ted 'at' lehigh 'dot' edu
coral.ie.lehigh.edu/~ted

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/coinbinary/attachments/20120719/2252db90/attachment.html>


More information about the CoinBinary mailing list