如何判断libboost_python.so使用的是什么python版本?

时间:2011-12-22 19:31:37

标签: python boost boost-python

我想知道python boost_python.so期望的版本。这是在有多个python版本的计算机上,我没有自己构建/安装boost(我也没有root权限)。

我怎么知道为哪个版本的python boost_python.so编译?

我没有在ldd的输出中找到任何有用的东西,但是在这里包含它,以防其他人看到的东西。

-bash-3.2$ ldd -v libboost_python.so.1.46.1 
libutil.so.1 => /lib64/libutil.so.1 (0x00002ad65582d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ad655a30000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002ad655c4b000)
librt.so.1 => /lib64/librt.so.1 (0x00002ad655e50000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002ad656059000)
libm.so.6 => /lib64/libm.so.6 (0x00002ad656359000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002ad6565dd000)
libc.so.6 => /lib64/libc.so.6 (0x00002ad6567eb000)
/lib64/ld-linux-x86-64.so.2 (0x000000374c600000)

Version information:
./libboost_python.so.1.46.1:
    libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
    libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
    libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
    libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6
    libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6
/lib64/libutil.so.1:
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libpthread.so.0:
    ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
    ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
    ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
    libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
    libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libdl.so.2:
    ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
    libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/librt.so.1:
    ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
    libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
    libpthread.so.0 (GLIBC_PRIVATE) => /lib64/libpthread.so.0
    libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
    libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
/usr/lib64/libstdc++.so.6:
    ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
    libgcc_s.so.1 (GCC_4.2.0) => /lib64/libgcc_s.so.1
    libgcc_s.so.1 (GCC_3.3) => /lib64/libgcc_s.so.1
    libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
    libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
    libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
    libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libm.so.6:
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libgcc_s.so.1:
    libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libc.so.6:
    ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
    ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

4 个答案:

答案 0 :(得分:3)

这是你在找什么?

~/Desktop$ dpkg --list | grep libboost
ii  libboost-filesystem1.46.1                      1.46.1-5ubuntu2                         filesystem operations (portable paths, iteration over directories, etc) in C++
ii  libboost-program-options1.46.1                 1.46.1-5ubuntu2                         program options library for C++
ii  libboost-python-dev                            1.46.1.1                                Boost.Python Library development files (default version)
ii  libboost-python1.46-dev                        1.46.1-5ubuntu2                         Boost.Python Library development files
ii  libboost-python1.46.1                          1.46.1-5ubuntu2                         Boost.Python Library
ii  libboost-regex1.46.1                           1.46.1-5ubuntu2                         regular expression library for C++
ii  libboost-serialization1.46.1                   1.46.1-5ubuntu2                         serialization library for C++
ii  libboost-signals1.46.1                         1.46.1-5ubuntu2                         managed signals and slots library for C++
ii  libboost-system1.46.1                          1.46.1-5ubuntu2                         Operating system (e.g. diagnostics support) library
ii  libboost-thread1.46.1                          1.46.1-5ubuntu2                         portable C++ multi-threading
ii  libboost1.46-dev                               1.46.1-5ubuntu2                         Boost C++ Libraries development files

以上适用于基于debian的发行版。我相信Fedora的等价物应该是:

rpm -qa | grep libboost

HTH!

答案 1 :(得分:3)

来自:https://github.com/mapnik/mapnik/wiki/InstallationTroubleshooting

“有时即使这样也行不通。提示:传递-d2标志以查看bjam发送给gcc的所有编译命令,你可能会在编译参数中看到类似-I / usr / include / python24的内容它应该是-I / usr / include / python26(或一些旧版本的python头文件。)如果发生这种情况,那么你可以制作一个完整的配置文件(包含所有可能的python信息)并在bjam命令行上传递一个引用关于此的文档在这里:http://www.boost.org/doc/libs/1_42_0/libs/python/doc/building.html#configuring-boost-build,下面是一个例子:

创建一个名为'user-config.jam'的文件(但将python版本改为合适):<​​/ p>

import option ;
import feature ;
if ! gcc in [ feature.values <toolset> ]
{
    using gcc ;
}
project : default-build <toolset>gcc ;
using python
     : 2.5 # version
     : /usr/bin/python2.5 # cmd-or-prefix
     : /usr/include/python2.5/ # includes
     : /usr/lib/python2.5/config/ # a lib actually symlink
     : <toolset>gcc # condition
     ;
libraries = --with-python ;

查找.jam配置文件。如果存在则检查'using python'命令。如果它不存在,则对bjam运行-d2标志以确定它使用的python的默认位置。这显然不是一种直接的方法,只会给你一个可能的答案给出输入(但也许这已经足够了)。

答案 2 :(得分:0)

有趣的是,在我的OS X系统上,otool -L确实列出了python库,但在Linux系统上我可以访问它似乎是一个未满足的依赖项,并且没有列在{{{ 1}}输出。

在我的情况下,我知道它是针对python 2.7编译的,但检查ldd的输出显示没有提及strings /.../libboost_python.so,而2.7仅出现在无关的错位符号中到python版本。

所以我得出的结论是,如果没有在2.6,2.7版本之间寻找符号的API差异,就无法判断。

或许检查修改后的时间戳会缩小范围吗?

答案 3 :(得分:0)

我意识到OP正在询问如何在Linux环境中执行此操作,但我在Windows环境中遇到了同样的问题,并认为在此处分享可能是有用的信息。

要查看将自动链接到生成的可执行文件中的Python DLL,请使用Visual Studio附带的dumpbin实用程序。只需打开Visual Studio开发人员命令提示符,然后运行:

dumpbin /DIRECTIVES libboost_python3-*.lib | findstr DEFAULTLIB:python

这至少会告诉你构建Boost时使用的主要/次要版本的Python。例如,如果在构建Boost时使用了Python 3.5.2,则此命令将返回带有文本的一堆行:

  

/DEFAULTLIB:python35.lib