使用cmake寻找合适的Python框架
我在一台运行Snow Leopard系统的电脑上使用macports版本的python,并且用cmake来构建一个跨平台的扩展。我在CMakeLists.txt文件中用以下命令来查找系统中的python解释器和库。
include(FindPythonInterp)
include(FindPythonLibs )
不过,虽然cmake找到了正确的解释器在/opt/local/bin
,但它却试图链接到错误的框架,也就是系统自带的Python框架。
-- Found PythonInterp: /opt/local/bin/python2.6
-- Found PythonLibs: -framework Python
这就导致了下面的运行时错误。
Fatal Python error: Interpreter not initialized (version mismatch?)
一旦我把-framework Python
替换成/opt/local/Library/Frameworks/Python.framework/Python
,事情就开始按预期工作了。
我该如何让cmake链接到在
/opt/local/Library/Frameworks/Python.framework/Python
找到的正确的Python框架,而不是系统自带的那个呢?
/System/Library/Frameworks/Python.framework/Python
?
2 个回答
1
我对CMake不是特别熟悉,不过在苹果版本的gcc/ld中,你可以使用-F
这个参数来指定一个新的框架搜索路径。比如说,-F/opt/local/Library/Frameworks
这个参数会让它去MacPorts的框架目录里找东西。如果你能在CMake中指定这样的参数,可能就能解决你的问题。
5
在 ~/.bash_profile
文件中添加以下内容
export DYLD_FRAMEWORK_PATH=/opt/local/Library/Frameworks
可以暂时解决这个问题。显然,python解释器和cmake使用的python框架之间的这种不一致是一个错误,希望在新版本中能得到修复。