2010-03-10 32 views
6

我有一个应用程序链接到OS X的Python.framework。由于Snow Leopard升级到Python 2.6,该框架现在包含2.4,2.5和2.6版本。但是,我的程序似乎并不想链接到2.6,而当我尝试使用较新的Python运行时的功能时,最终导致错误。如何链接到Xcode中的特定框架版本?

我知道我可以使用install_name_tool在后期构建步骤中更改链接,但有什么方法可以简单地告诉它在构建过程中何处链接?看起来像一个很常见的用例。

回答

2

我还没有试过这个,但我相信它会工作。

1)框架不要添加到您的Xcode项目

2)相反,使用完整路径到库中“OTHER_LINKER_FLAGS” - 如此“/System/Library/Frameworks/Python.framework/2.5/ Python“

3)您还需要将框架搜索路径设置为”/System/Library/Frameworks/Python.framework/2.5/“,并将包含搜索路径设置为”/ System/Library/Frameworks/Python.framework/2.5/Headers“

但是,尽管如此,它将使您容易受到Apple可能做出的任何更改的影响。例如,如果他们以后从框架中删除2.5,所有内容都会中断。只需更新您的应用以使用当前版本的Python即可。

+0

对,我*希望*链接到较新版本的Python。问题是我的程序似乎只想连接到2.5版本,即使包含include和lib路径集。我可以在事后修复它,但那感觉就像一团糟。 – SJML 2010-03-12 00:45:20

+0

此建议适用于链接到较旧的框架(例如,如果您链​​接到10.7上的Python.framework,该应用程序将不会在10.6上加载(即使这是另一种构建知道如何检测二进制文件的有效方法并通过弱链接使用10.7和10.6中的函数)但是,在Xcode 4中,我在链接阶段手动指定了库,并且它工作正常(而不是使用OTHER_LINKER_FLAGS进行操作) – gaige 2012-01-05 18:07:33

1

我也有这个具体问题,并且找不到在构建中获取Python Framework 2.6的方法。

我无法使OTHER_LINKER_FLAGS方法奏效,唉。

所以,像SJML建议,我用了一个后生成步骤如下所示:

# 
# Force the required version of Python to be 2.6 
# dvb10.12.01 

install_name_tool \ 
    -change \ 
     /System/Library/Frameworks/Python.framework/Versions/2.5/Python \ 
     /System/Library/Frameworks/Python.framework/Versions/2.6/Python \ 
    $TARGET_BUILD_DIR/omino_python.plugin/Contents/MacOS/omino_python 

只是把它那里的grepping。 :)

相关问题