[C++-sig] Building boost.python on Mac OS X

Bob Ippolito bob at redivi.com
Sat Sep 13 04:15:32 CEST 2003


On Friday, Sep 12, 2003, at 21:36 America/New_York, Ralf W. 
Grosse-Kunstleve wrote:

>> Thanks for these pointers.  Based on that information and your public
>> build logs, I was able to build and link libboost_python.dylib and our
>> extension module against a non-framework installation of Python2.3.
>
> Wow! That's very interesting.
> Did you try using /usr/bin/python?
> Now I am beginning to wonder if it is better to work with a framework 
> or a
> non-framework build. I am not an Apple user. Could someone more 
> experienced
> with OS X name some pros and cons?

Frameworks are nicer to work with than libraries because they put 
everything in one place.  They're "opaque directory structures", or 
Bundles.. For example, in a typical unix application, when you install 
a library:
	the library goes in /usr/local/lib
	the headers go in /usr/local/include
	its resources go in... who knows, /usr/local/share maybe?  it depends.
	they have no metadata.

With a framework:
	the framework goes in /Library/Frameworks (as frameworkName.framework)
		the headers go in the framework.. /Headers
		the library goes in the framework.. frameworkName
		its resources go in the framework.. /Resources	
	Frameworks also have metadata associated with them in a plist file 
(xml or NeXT style property list)

It's nice for organization.  In gcc on OS X, if you say #include 
<frameworkName/someFrameworkHeader.h> you don't even need an 
-I/Library/Frameworks/frameworkName/Headers as a linker flag.  It just 
knows where to find it.  Also, when you're linking, instead of 
-lsomelibrary you just say -framework frameworkName.

There's also more than one place you can put frameworks, 
/Library/Frameworks, ~/Library/Frameworks, 
@executable_path/../Frameworks, etc.  @executable_path is a special 
thing in a mach-o header that lets you reference dynamic libraries 
inside an application bundle.

Frameworks can also do lots of things with regard to versioning.  For 
example, you may not know this, but you probably have 3 versions of the 
Foundation framework installed, so that older applications that link to 
an older version will find it just fine.

That said, they're merely for consistency and organization.. They're 
great, and I recommend them, but they don't do much for you 
*technically*.  A dylib is a dylib, and frameworks use dylibs.  There 
is nothing super special about them as far as linking is concerned, and 
they don't get any super special features (other than the features that 
bundles give you.. really easy localization, easy to move around, stuff 
like that, but that's mostly at the application level).

It is better to work with a framework build if you have one, but 
distutils fully support frameworks yet so you will have to tweak things 
if your python module links to other frameworks.

-bob





More information about the Cplusplus-sig mailing list