在Mac上配置Python ldflags
我在使用 python-config --ldflags
时遇到了问题,系统是 OS X 10.6.2。
我用的是从 python.org 下载的非系统版本的 Python:
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
但是当我用上面的 LDFLAGS 来编译一个嵌入 Python 的 C 程序时,结果却是嵌入了系统自带的 Python。看起来 -lpython2.5 先找到了系统的 Python,而不是我在 -L 路径中指定的那个。
到目前为止,我唯一能让它工作的办法是:
LDFLAGS=-F/ -framework Python
不过在分发时,我真的希望能使用 python-config。
到底是什么原因导致库搜索路径没有按预期工作呢?根据手册,-L 路径应该在默认路径之前被搜索。
有没有什么选项可以让 python-config 忽略默认搜索路径,只搜索 -L 指定的路径呢?
或者有没有办法从路径中提取出有效的 -framework 标志,这样无论用户使用的是哪个 Python(比如系统自带的、python.org 的、macports 的或者自己编译的)都能正常工作?
1 个回答
抱歉我自己回答自己的问题,但我在pythonmac-sig邮件列表上也问了这个问题,得到了非常迅速的回复。这个问题是当前Python的一个bug:http://bugs.python.org/issue7541
推荐的解决方法:
最简单的解决方法是打开一个终端窗口,然后执行以下命令:
cd /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config ln -s libpython2.5.a libpython2.5.dylib
这样可以确保OSX的链接器知道libpython是一个共享库,并且会链接到这个库。默认情况下,OSX的链接器会在整个链接路径中搜索.dylib文件,然后才会去找.a文件。
编辑:进一步更新:
如果你可以在构建系统中添加特定于Mac的标志,可以在LDFLAGS中添加
-Wl,-search_paths_first
,这样可以确保链接器在进入下一个目录之前,先在链接路径中的一个目录中查找.dylib和.a文件。