views:

220

answers:

1

I have a problem with python-config --ldflags on OS X 10.6.2.

Using my non-system python.org python install:

robin-mbp:~ robince$ which python
/Library/Frameworks/Python.framework/Versions/2.5/bin/python
robin-mbp:~ robince$ python-config --ldflags
-L/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config -ldl -lpython2.5

But if I build a c program embedding Python with the above LDFLAGS, it results in the system python being embedded. It seems -lpython2.5 is picking up the system python first, before the one in the -L path.

So far the only way I've got it to work is with

LDFLAGS=-F/ -framework Python

but when it comes to distributing I'd really like to be able to use python-config.

What is going on with the library search path that stops it working as expected? According to the man page -L paths should be searched before the default path.

Is there any option along the lines of 'forget the default search path and search only paths specified with -L' that I could add to python-config output to get it to work?

Or is there any way to extract the working -framework flags from whichever Python is on the path (that would work for whatever the user is using, ie system, python.org, macports or own built)?

+1  A: 

Sorry to answer my own question but I got an amazingly prompt reply on the pythonmac-sig mailing list where I also asked. It is a bug with current python: http://bugs.python.org/issue7541

Suggested workaround:

The easiest workaround is to open a terminal window and execute the following commands:

cd /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config ln -s libpython2.5.a libpython2.5.dylib

This will ensure that the OSX linker knows that libpython is a shared library and links to this library. By default the OSX linker searches for a .dylib on the entire linker path and only then looks for .a files.

EDIT: Further update:

If you can add mac-specific flags in your build system you could add -Wl,-search_paths_first to LDFLAGS on OSX, this ensures that the linker looks for both .dylib and .a files in a directory on the link path before moving to the next directory.

thrope
If your question is now resolved, you may accept your own answer.
ephemient
@ephemient not for 2 days! (so it tells me when I try)
thrope