使用cmake寻找合适的Python框架

8 投票
2 回答
4183 浏览
提问于 2025-04-15 15:54

我在一台运行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框架之间的这种不一致是一个错误,希望在新版本中能得到修复。

撰写回答