[mira_talk] Re: MIRA3r4 and memory on Mac OS X

  • From: Peter <peter@xxxxxxxxxxxxxxxxxxxxx>
  • To: mira_talk@xxxxxxxxxxxxx
  • Date: Thu, 26 Nov 2009 15:54:29 +0000

On Thu, Nov 26, 2009 at 11:55 AM, Peter <peter@xxxxxxxxxxxxxxxxxxxxx> wrote:
> On Tue, Nov 24, 2009 at 5:17 PM, Bastien Chevreux <bach@xxxxxxxxxxxx> wrote:
>>
>> On Dienstag 24 November 2009 Peter wrote:
>>> From watching this in the activity monitor, I think this is failing at
>>> the 4GB memory boundary - and I noticed that the log says it was
>>> compiled in 32 bit mode. Is this likely to be the problem? Any tips
>>> for ensuring MIRA compiles in 64bit mode?
>>
>> Hmmm, compiling under Apple always has some surprises it seems.
>>
>> Make clean, then  use "-enable-64" as one of the switches to the configure
>> script, then make all. Should do the trick.
>
> OK, I did a "make clean", then:
>
> $ ./configure -enable-64 --with-boost=/Users/myusername/
> ...
> We are building on ............................... Darwin
> CPU supports 64 bit? ......... ................... no
> Compiler ......................................... gcc
> ...
>
> Clearly the configure script doesn't recognise my Quad-Core Intel
> Xeon CPUs as supporting 64bit. i.e. has_int64_t isn't being set.

As an experiment, I edited the configure script to tell it to use the
-m64 flag to gcc under Darwin (i.e. on Mac OS X) as well as on
SunOS:

    if test "${systemuname}" = "SunOS" || test "${systemuname}" = "Darwin"; then
    if test "$CC" = "gcc"; then
      CFLAGS="$CFLAGS -m64"
      CXXFLAGS="$CXXFLAGS -m64"
      LDFLAGS="$LDFLAGS -m64"
    fi
  fi

Then I get using:

$ ./configure  --with-boost=/Users/myusername/

or:

$ ./configure -enable-64 --with-boost=/Users/myusername/
...
We are building on ............................... Darwin
CPU supports 64 bit? ......... ................... yes
Compiler ......................................... gcc
-n Compiler optimisation flags used .................
-O2
Do we compile in 64 bit? ......................... yes
...

Which looks promising. I then re-ran "make clean" and "make",
and it compiled part way before failing:

ld: warning in /Users/myusername/lib/libboost_thread.dylib, file is
not of required architecture
Undefined symbols:
Undefined symbols:
  "typeinfo for boost::lock_error", referenced from:
      void boost::condition_variable_any::wait<boost::unique_lock<boost::mutex>
>(boost::unique_lock<boost::mutex>&)in libmira.a(skim.o)
      void boost::condition_variable_any::wait<boost::unique_lock<boost::mutex>
>(boost::unique_lock<boost::mutex>&)in libmira.a(skim.o)
  "boost::thread::join()", referenced from:
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
  "boost::detail::thread_data_base::~thread_data_base()", referenced from:
      boost::detail::thread_data<boost::_bi::bind_t<void,
boost::_mfi::mf1<void, Skim, unsigned int>,
boost::_bi::list2<boost::reference_wrapper<Skim>,
boost::_bi::value<unsigned int> > > >::~thread_data()in
libmira.a(skim.o)
      boost::detail::thread_data<boost::_bi::bind_t<void,
boost::_mfi::mf1<void, Skim, unsigned int>,
boost::_bi::list2<boost::reference_wrapper<Skim>,
boost::_bi::value<unsigned int> > > >::~thread_data()in
libmira.a(skim.o)
  "boost::thread::start_thread()", referenced from:
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
  "typeinfo for boost::thread_resource_error", referenced from:
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
  "boost::thread::~thread()", referenced from:
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
  "typeinfo for boost::detail::thread_data_base", referenced from:
      typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void,
boost::_mfi::mf1<void, Skim, unsigned int>,
boost::_bi::list2<boost::reference_wrapper<Skim>,
boost::_bi::value<unsigned int> > > >in libmira.a(skim.o)
  "vtable for boost::detail::thread_data_base", referenced from:
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
  "boost::thread_resource_error::thread_resource_error()", referenced from:
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
  "boost::thread_resource_error::~thread_resource_error()", referenced from:
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::Skim()  in libmira.a(skim.o)
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
      Skim::checkForHashes(signed char)in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
      boost::detail::thread_data_base::thread_data_base()in libmira.a(skim.o)
  "boost::lock_error::lock_error()", referenced from:
      void boost::condition_variable_any::wait<boost::unique_lock<boost::mutex>
>(boost::unique_lock<boost::mutex>&)in libmira.a(skim.o)
      void boost::condition_variable_any::wait<boost::unique_lock<boost::mutex>
>(boost::unique_lock<boost::mutex>&)in libmira.a(skim.o)
  "boost::detail::get_current_thread_data()", referenced from:
      void boost::condition_variable_any::wait<boost::unique_lock<boost::mutex>
>(boost::unique_lock<boost::mutex>&)in libmira.a(skim.o)
  "boost::lock_error::~lock_error()", referenced from:
      void boost::condition_variable_any::wait<boost::unique_lock<boost::mutex>
>(boost::unique_lock<boost::mutex>&)in libmira.a(skim.o)
      void boost::condition_variable_any::wait<boost::unique_lock<boost::mutex>
>(boost::unique_lock<boost::mutex>&)in libmira.a(skim.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[2]: *** [mira_101] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1

This looks like some BOOST 64 bit specific problem that I don't understand.

If I go back to 32bit mode,

$ ./configure -enable-64=no --with-boost=/Users/myusername/
...
We are building on ............................... Darwin
CPU supports 64 bit? ......... ................... no
Compiler ......................................... gcc

Then "make clean" and "make" work as before.

Peter

--
You have received this mail because you are subscribed to the mira_talk mailing 
list. For information on how to subscribe or unsubscribe, please visit 
http://www.chevreux.org/mira_mailinglists.html

Other related posts: