help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Build failure on OS X


From: Otto Maddox
Subject: Re: Build failure on OS X
Date: Sat, 31 Dec 2005 16:16:58 +0000

OK, thanks to the helpful responses on this list, a bit of googling
and some experimentation, I think I have made some progress.  I'll now
describe what I have figured out so far, because it might generalise
to other situations when using a third-party g77 in concert with
Apple's gcc/g++ 3.3.

My GCC 3.4.5 (which includes g77, as well as gcc and g++) is installed
under /opt/local/gcc34.

I restarted the configure/make process to make octave as minimal as I
could (for debugging purposes):

$ env CC=/usr/bin/gcc-3.3 CXX=/usr/bin/g++-3.3
F77=/opt/local/gcc34/bin/g77 ./configure --disable-readline
$ make

and it goes OK until this (continued afterwards):

    /usr/bin/g++-3.3  -I. -I.. -I../liboctave -I../src
    -I../libcruft/misc  -DHAVE_CONFIG_H  -Wall -W -Wshadow -g -O2  \
    -L..    -o octave \
    main.o  balance.o  besselj.o  betainc.o  chol.o  colloc.o  daspk.o 
    dasrt.o  dassl.o  det.o  eig.o  expm.o  fft.o  fft2.o  fftn.o 
    fftw_wisdom.o  filter.o  find.o  fsolve.o  gammainc.o  gcd.o 
    getgrent.o  getpwent.o  getrusage.o  givens.o  hess.o  inv.o  kron.o
     lpsolve.o  lsode.o  lu.o  minmax.o  pinv.o  qr.o  quad.o  qz.o 
    rand.o  schur.o  sort.o  sqrtm.o  svd.o  syl.o  time.o \
    -L../liboctave -L../libcruft -L../src  \
    ../src/liboctinterp.a ../liboctave/liboctave.a 
    ../libcruft/libcruft.a   \
     -framework vecLib  -lncurses -lm 
     -L/opt/local/gcc34/lib/gcc/powerpc-apple-darwin8.3.0/3.4.5
     -L/opt/local/gcc34/lib/gcc/powerpc-apple-darwin8.3.0/3.4.5/../../..
     -lm -lfrtbegin -lg2c -lgcc_s -lSystemStubs -lSystem
    ld: warning multiple definitions of symbol _xerbla_
    ../src/liboctinterp.a(xerbla.o) definition of _xerbla_ in section
    (__TEXT,__text)
    
/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib(single
    module) definition of _xerbla_
    ld: Undefined symbols:
    __ZNSs20_S_empty_rep_storageE
    __ZNSt24__default_alloc_templateILb1ELi0EE10deallocateEPvm
    __ZNSt24__default_alloc_templateILb1ELi0EE12_S_force_newE
    __ZNSt24__default_alloc_templateILb1ELi0EE12_S_free_listE
    __ZNSt24__default_alloc_templateILb1ELi0EE22_S_node_allocator_lockE
    __ZNSt24__default_alloc_templateILb1ELi0EE8allocateEm
    __ZNSt24__default_alloc_templateILb1ELi0EE9_S_refillEm
    restFP
    saveFP
    __ZNSt24__default_alloc_templateILb1ELi0EE5_LockD4Ev
    __ZNSsD4Ev
    __ZNSs4_Rep9_S_createEmRKSaIcE
    __ZNSt15basic_streambufIcSt11char_traitsIcEEC4Ev
    __ZNSt15basic_streambufIcSt11char_traitsIcEED4Ev
    __ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE14_M_really_syncEmm
    
__ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode
    __ZNSaIcED4Ev
    __ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC4ESt13_Ios_Openmode
    __ZNSt13basic_filebufIcSt11char_traitsIcEED4Ev
    __ZNSi5seekgElSt12_Ios_Seekdir
    
__ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC4ERKSsSt13_Ios_Openmode
    make[2]: *** [octave] Error 1
    make[1]: *** [src] Error 2
    make: *** [all] Error 2

In particular, ld has the following two options passed to it:

-L/opt/local/gcc34/lib/gcc/powerpc-apple-darwin8.3.0/3.4.5
-L/opt/local/gcc34/lib/gcc/powerpc-apple-darwin8.3.0/3.4.5/../../..

which contain Fortran libraries.  But they also contain
libstdc++{.a,.dylib} and libgcc.a, which I temporarily "disabled" by
renaming:

/opt/local/gcc34/lib/gcc/powerpc-apple-darwin8.3.0/3.4.5/libgcc.a.orig
/opt/local/gcc34/lib/libstdc++.6.0.3.dylib.orig
/opt/local/gcc34/lib/libstdc++.6.dylib.orig
/opt/local/gcc34/lib/libstdc++.a.orig
/opt/local/gcc34/lib/libstdc++.dylib.orig
/opt/local/gcc34/lib/libstdc++.la.orig

The problem is that those libraries were shadowing the system
libraries /usr/lib/gcc/darwin/3.3/libstdc++.a and
/usr/lib/gcc/darwin/3.3/libgcc.a.  These system libraries contain the
"undefined symbols" which ld was complaining about.

saveFP and restFP problems seem to be well known to developers.  But I
can only assume that the undefined mangled C++ names are also for
Apple extensions, which is why they're not contained in
/opt/local/gcc34/lib/libstdc++.a

(By the way, adding -lcc_dynamic to the linking options is not needed
because saveFP and restFP are contained in
/usr/lib/gcc/darwin/3.3/libgcc.a)

After doing all this, I did another make, followed by make install
which succeeded.

The solution seems to work, but is ugly.  So another question
remains... how to do all this cleanly, that is, how to tell the
compiler/linker not to link against these particular libraries so I
don't have to rename them.  Any ideas?

Thanks.

-- 
http://www.fastmail.fm - Accessible with your email software
                          or over the web



-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]