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 wh开发者_运维问答atever the user is using, ie system, python.org, macports or own built)?
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.
精彩评论