在OSX上指定框架版本
我正在编译一个嵌入了Python的程序,具体是Python 3.1。在我的系统上,有几个版本的Python框架:3.1、2.5和2.6。当我在编译时给g++加上"-framework Python"这个参数时,g++似乎选择了2.6版本(它在"/System/Library/Frameworks/"这个路径下),而不是3.1版本(它在"/Library/Frameworks/"这个路径下),这导致了错误。两个路径都在框架搜索路径中,这从我在详细模式下(加上-v参数给g++)尝试编译可以看出来。
虽然这看起来是个简单的问题,但我在g++、ld或xcode的任何文档中都没有找到相关的信息。目前,我通过把/System/Library/Frameworks/Python.framework移动到/System/Library/Frameworks/Python.framework.moved来成功编译,但这方法不太好,而且只是个临时解决方案。
所以,有没有人知道解决这个问题的最佳方法?特别是,我希望能够针对正确版本的Python框架来编译这个程序,而不管系统上安装了其他哪些版本。
谢谢。
1 个回答
首先,试着去修改一下在 /Library/Frameworks
里的 Current
符号链接。
$ cd /Library/Frameworks/Python.framework/Versions
$ ls -l
total 4
drwxrwxr-x 8 root admin 340 Aug 31 02:10 2.6/
drwxrwxr-x 8 root admin 340 Oct 6 21:56 2.7/
drwxrwxr-x 7 root admin 306 Oct 6 14:00 3.1/
lrwxr-xr-x 1 root admin 3 Oct 7 00:33 Current@ -> 2.7
$ sudo rm Current
$ sudo ln -s 3.1 Current
(更新) 我原本希望,只要确保 /Library/Frameworks
里的 Current
链接指向正确的版本就可以了,但根据提问者的实验,可能还需要修改 /System/Library
里的类似链接。通常来说,修改 /System/Library
里的东西不是个好主意,因为那里的内容被视为 OS X 系统的一部分,由苹果管理,所以你所做的任何更改,最多会在下次 系统更新
时被恢复,最糟糕的情况是可能会导致系统崩溃。在这种情况下,可能 不会有太大影响,因为 Current
链接可能只在这种情况下使用,也就是链接一个嵌入的库。如果你特别谨慎,可以考虑在完成后恢复原来的值。