【发布时间】:2013-03-23 06:46:30
【问题描述】:
我问了另一个问题,这个问题太复杂了,无法直接回答,所以我把它归结为这个基本问题......
当我使用标准 cython distutils 构建我的 aModule.so 时,它似乎没有链接到 libpython:
$ otool -L aModule.so
aModule.so:
/usr/local/lib/libboost_thread-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/opt/thrift/lib/libthrift-0.9.0.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
但是当我使用 cmake 设置构建时,它会不断生成一个链接器命令,将 libpython 链接到 .so 中:
$ otool -L aModule.so
aModule.so:
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.1)
/usr/local/opt/thrift/lib/libthrift-0.9.0.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/lib/libboost_thread-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
distutils 生成的模块似乎适用于我的任何 python2.7 安装(系统或我的项目的 virtualenv)。而当我尝试使用除链接系统 python 之外的任何内容导入 cmake 时,cmake 会因版本不匹配而崩溃。
为什么 distutils 模块没有链接就可以正常工作?如果是这样的话,为什么我需要让 cmake 构建链接 libpython,如果是这样,我怎么能阻止它,以便它与我的任何 python2.7 解释器一起工作而不会崩溃?
目前我可以将 cmake 指向正确的 python:CXX=g++ cmake -DPYTHON_LIBRARY=/path/to/another/Python
【问题讨论】:
-
显然不直接与 Python 二进制文件链接的那个是有效的,因为动态链接器将符号与当前运行的 Python 挂钩(可能是一件好事)。不能说为什么 cmake 会引入 Python 二进制文件;我自己从来没有真正使用过 cmake。
-
正是我想的,这就是我想要的行为。 cmake的事情发生在模块的某个地方,它找到了python并添加了它。我只是想找到一个不能链接到 python 的解决方案:-/
标签: python cmake cython distutils