[Couenne] compiling Couenne in a macos

Joao Pedro Pedroso jpp at fc.up.pt
Sun Sep 26 01:14:22 EDT 2010


Hello,

I am having problems with undefined symbols when compiling Couenne in
a Mac OS X 10.6.4 (Leopard Snow).

I had a first issue with the Fortran compiler (gfortran), which by
default seems to be compiling for 32 bits; at some point in the
compilation, the following error was issued:

[...]
ar cru .libs/libcoinhsl.a .libs/dummy.o .libs/ma27ad.o .libs/ma57ad.o .libs/mc19ad.o
/usr/bin/ranlib: archive member: .libs/libcoinhsl.a(ma27ad.o) cputype (7) does not match previous archive members cputype (16777223) (all members must match)
[...]

I solved this adding "-m64" to the Fortran configuration options:

$ ../configure -C --prefix=/usr/local FFLAGS="-m64 -O3 -fomit-frame-pointer -pipe"

Now it compiles without problems, but there is a runtime problem:
$ ./Couenne/src/main/couenne
dyld: Symbol not found: _Infinity
  Referenced from: /Users/jpp/src/Couenne/build/Couenne/src/readnl/.libs/libCouenneReadnl.0.dylib
  Expected in: flat namespace
 in /Users/jpp/src/Couenne/build/Couenne/src/readnl/.libs/libCouenneReadnl.0.dylib
Trace/BPT trap
$ 

Strangely, the missing symbols were available in a static library at
linking time; I checked it with 'nm amplsolver.a'.

I did try to change the order of library inclusion, as suggested in 
   https://projects.coin-or.org/Couenne/ticket/1
I was not exhaustive, but the changes I tried did not work; .e.g,
putting amplsolver.a immediately after libCouenneReadnl.la:

$ cd build/Couenne/src/main
$ /bin/sh ../../../libtool --tag=CXX --mode=link g++  -O3 -fomit-frame-pointer -pipe -DNDEBUG -Wimplicit -Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas     -o couenne -rpath /usr/local/lib BonCouenne.o libBonCouenne.la ../readnl/libCouenneReadnl.la  /Users/jpp/src/Couenne/build/ThirdParty/ASL/amplsolver.a ../libCouenne.la  /Users/jpp/src/Couenne/build/Couenne/../Cbc/src/libCbc.la /Users/jpp/src/Couenne/build/Couenne/../Cgl/src/libCgl.la /Users/jpp/src/Couenne/build/Couenne/../Osi/src/OsiClp/libOsiClp.la /Users/jpp/src/Couenne/build/Couenne/../Bonmin/src/CbcBonmin/libbonmin.la /Users/jpp/src/Couenne/build/Couenne/../Bonmin/src/Algorithms/Branching/libbonbranching.la /Users/jpp/src/Couenne/build/Couenne/../Bonmin/src/Interfaces/libbonmininterfaces.la /Users/jpp/src/Couenne/build/Couenne/../Ipopt/src/Interfaces/libipopt.la /Users/jpp/src/Couenne/build/Couenne/../Ipopt/src/LinAlg/liblinalg.la  /Users/jpp/src/Couenne/build/Couenne/../Osi/src/libOsi.la /Users/jpp/src/Couenne/build/Couenne/../Clp/src/libClp.la /Users/jpp/src/Couenne/build/Couenne/../CoinUtils/src/libCoinUtils.la -lm -ldl `cat /Users/jpp/src/Couenne/build/Couenne/../Ipopt/src/Interfaces/ipopt_addlibs_cpp.txt` `cat /Users/jpp/src/Couenne/build/Couenne/../CoinUtils/coinutils_addlibs.txt` 
g++ -O3 -fomit-frame-pointer -pipe -DNDEBUG -Wimplicit -Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -o .libs/couenne BonCouenne.o -Wl,-bind_at_load  ./.libs/libBonCouenne.dylib ../readnl/.libs/libCouenneReadnl.dylib /Users/jpp/src/Couenne/build/ThirdParty/ASL/amplsolver.a ../.libs/libCouenne.dylib /Users/jpp/src/Couenne/build/Couenne/../Cbc/src/.libs/libCbc.dylib /Users/jpp/src/Couenne/build/Couenne/../Cgl/src/.libs/libCgl.dylib /Users/jpp/src/Couenne/build/Couenne/../Osi/src/OsiClp/.libs/libOsiClp.dylib /Users/jpp/src/Couenne/build/Couenne/../Bonmin/src/CbcBonmin/.libs/libbonmin.dylib /Users/jpp/src/Couenne/build/Couenne/../Bonmin/src/Algorithms/Branching/.libs/libbonbranching.a /Users/jpp/src/Couenne/build/Couenne/../Bonmin/src/Interfaces/.libs/libbonmininterfaces.a /Users/jpp/src/Couenne/build/Couenne/../Ipopt/src/Interfaces/.libs/libipopt.dylib /Users/jpp/src/Couenne/build/Couenne/../Ipopt/src/LinAlg/.libs/liblinalg.a /Users/jpp/src/Couenne/build/Couenne/../Osi/src/.libs/libOsi.dylib /Users/jpp/src/Couenne/build/Couenne/../Clp/src/.libs/libClp.dylib /Users/jpp/src/Couenne/build/Couenne/../CoinUtils/src/.libs/libCoinUtils.dylib -lpthread -ldl -L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3/x86_64 -L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3/../../../x86_64 -L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3 -L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3/../../.. /usr/local/lib/gcc/i686-apple-darwin8/4.2.3/x86_64/libgfortranbegin.a -lgfortran -lgcc_s.10.4 -lSystem -llapack -lblas -lm
creating couenne
$ ./couenne
dyld: Symbol not found: _Infinity
  Referenced from: /Users/jpp/src/Couenne/build/Couenne/src/readnl/.libs/libCouenneReadnl.0.dylib  
  Expected in: flat namespace 
 in /Users/jpp/src/Couenne/build/Couenne/src/readnl/.libs/libCouenneReadnl.0.dylib
Trace/BPT trap
$ 


Finally, I tried to link directly the file where Infinity is defined
(mach.o, from ASL/solvers) and it did work for this symbol, though
another missing symbol was reported (_L_val_ASL).

I am using version 0.3 of Couenne, obtained though
$ svn co https://projects.coin-or.org/svn/Couenne/stable/0.3 Couenne
The compiler is 
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)


I am pretty sure that this is a problem with the Apple gcc compiler,
but any help would be appreciated...

Best regards,

Joao Pedro
--
PS: I tried to compile without ASL, but curiously the problem was not
solved:
$ ../configure -C --without-ASL --prefix=/usr/local FFLAGS="-m64 -O3 -fomit-frame-pointer -pipe"
$ make
[...]
$ ./Couenne/src/main/couennedyld: Symbol not found: _Infinity
  Referenced from: /Users/jpp/src/Couenne/build/Couenne/src/readnl/.libs/libCouenneReadnl.0.dylib
  Expected in: flat namespace
 in /Users/jpp/src/Couenne/build/Couenne/src/readnl/.libs/libCouenneReadnl.0.dylib
Trace/BPT trap
$ 



More information about the Couenne mailing list