[MacPorts] #37678: MacPorts gcc gives malloc error on correct program using boost, Apple's gcc doesn't
MacPorts
noreply at macports.org
Fri Jan 18 07:34:01 PST 2013
#37678: MacPorts gcc gives malloc error on correct program using boost, Apple's gcc
doesn't
------------------------------+--------------------------------
Reporter: yusuhail@… | Owner: macports-tickets@…
Type: defect | Status: closed
Priority: Normal | Milestone:
Component: ports | Version: 2.1.2
Resolution: worksforme | Keywords:
Port: boost libstdcxx |
------------------------------+--------------------------------
Changes (by adfernandes@…):
* status: new => closed
* resolution: => worksforme
Comment:
Replying to [comment:11 ecronin@…]:
> I don't believe boost is sadistic enough yet to have bjam process the
headers installed, so multiple compilers could share the same
$prefix/include/boost. Boost also supports versioned library names which
allow you to install boost for multiple compilers into the standard
location at the cost of needing -lboost_system-gcc47-mt instead of just
-lboost_system.
This is correct. The major problem with boost is that it has one-header-
for-all that changes all sorts of interface assumptions about how the
libraries were built, and it's terrible with encapsulation. Basically,
this means that the compiler that processes the boost headers needs to be
the same compiler that built the libraries. That's why they added the
brain-dead `-lboost_system-gcc47-mt` stuff.
MPI is a different issue. The openmpi headers encapsulate the interfaces
quite well, so you '''can''' do things like mix dylibs compiled with
different compilers. As long as the headers correctly specify the
(constant) interfaces to the dylibs, it doesn't matter what compiler
creates the dylibs. (There are side-issues with this, such as people using
different c++ std libraries by accident, but those are side issues.)
Basically, my experiences with boost are that it really his horrible to
use as a system library if you have multiple compilers. It was designed
and tested in '''one''' configuration - the one that uses the system
compiler. The "one system compiler to rule them all" is kind-of an old-
time concept... but that's what they do.
Any variants of boost that specify the compiler would just introduce a
reverse-bug; all projects using the boost libraries would then need to use
the same compiler... :-)
By the way - I just ran the code sample in the report using system
gcc-4.2.1, system clang and gcc47 from macports, and all three compiled
and ran without problems, so marking as `worksforme` (OS 10.8.2, latest
Xcode tools, etc.)
--
Ticket URL: <https://trac.macports.org/ticket/37678#comment:16>
MacPorts <http://www.macports.org/>
Ports system for Mac OS
More information about the macports-tickets
mailing list