Ubuntu 16.04和mapnik - Python参数类型与C ++签名不匹配

时间:2016-07-11 00:02:08

标签: python c++ ubuntu-16.04 mapnik

我必须在Ubuntu 16.04(现有服务器)上安装mapnik / mapnik-python 两个库编译没有任何问题,但python mapnik模块不起作用。导入mapnik模块后,我收到错误:

/home/user# python
Python 2.7.11+ (default, Apr 17 2016, 14:00:29)
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mapnik
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mapnik/__init__.py", line 1075, in <module>
    register_plugins()
  File "mapnik/__init__.py", line 1057, in register_plugins
    DatasourceCache.register_datasources(path)
Boost.Python.ArgumentError: Python argument types in
    DatasourceCache.register_datasources(str)
did not match C++ signature:
    register_datasources(std::string)
>>>

模块与libboost 1.58链接:

/usr/local/lib/python2.7/dist-packages/mapnik-0.1-py2.7-linux-x86_64.egg/mapnik# ldd _mapnik.so
        linux-vdso.so.1 =>  (0x00007ffc3f7fb000)
        libmapnik.so.3.0 => /usr/local/lib/libmapnik.so.3.0 (0x00007f093ad96000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f093ab7c000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f093a977000)
        libboost_python-py27.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0 (0x00007f093a72b000)
        libboost_thread.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.58.0 (0x00007f093a505000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f093a2fc000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0939f7a000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0939c71000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0939a5a000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f093983d000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0939474000)
        /lib64/ld-linux-x86-64.so.2 (0x000055969793c000)
        libboost_system.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 (0x00007f093926f000)

C ++代码定义为:

void register_datasources(std::string const& path)
{
    mapnik::datasource_cache::instance().register_datasources(path);
}

Python代码:

def register_plugins(path=None):
    """Register plugins located by specified path"""
    if not path:
        if 'MAPNIK_INPUT_PLUGINS_DIRECTORY' in os.environ:
            path = os.environ.get('MAPNIK_INPUT_PLUGINS_DIRECTORY')
        else:
            from .paths import inputpluginspath
            path = inputpluginspath
    DatasourceCache.register_datasources(path)

我研究了一个boost库手册,发现std :: string const&amp;是一个正确的类型声明。看起来这是一个提升库错误。

有没有办法让它运作? 有没有办法在Ubuntu16.04中降级libboost_python?

更新:我使用nm -C查看了已编译的_mapnik.so文件,发现了这个:

U mapnik::datasource_cache::register_datasources(std::string const&, bool)

添加了一个功能参数。这是正常的吗?

0 个答案:

没有答案