构建 Mapnik(C++ 程序)时出错

问题描述 投票:0回答:1

我正在尝试在本地 Linux Mint 21.2 机器上从源代码构建 Mapnik(GitHub 上的源代码

编译时,因错误而停止。

include/mapnik/filesystem.hpp:38:21: error: expected namespace name
namespace fs = std::filesystem;
               ~~~~~^
include/mapnik/filesystem.hpp:39:25: error: no type named 'error_code' in namespace 'std'
using error_code = std::error_code;
                   ~~~~~^
src/fs.cpp:40:12: error: use of undeclared identifier 'fs'
    return fs::exists(filepath);
           ^

之后还有更多错误,但这就是问题的开始。

编辑:之前还有很多关于一元函数被弃用的警告。

In file included from mason_packages/.link/include/boost/type_index/stl_type_index.hpp:47:
mason_packages/.link/include/boost/container_hash/hash.hpp:131:33: warning: 'unary_function<std::type_index, unsigned long>' is deprecated [-Wdeprecated-declarations]
        struct hash_base : std::unary_function<T, std::size_t> {};
                                ^

这就是我所做的:

我尝试按照 Mapnik Linux 安装指南

中的说明进行操作

他们特别警告需要一个符合 C++14 标准的最新编译器。所以我怀疑这与我使用错误的编译器有关。

我成功添加了

ubuntu-toolchain-r/test
PPA 以安装最新的编译器版本。但是:当我尝试安装
gcc-6
时,它说没有这样的包,但它被另一个包引用了。我很困惑。我认为
gcc-6
太旧了,无法再包含在 PPA 中,因为当前版本是
gcc-12
,但也许在编写安装 Wiki 时它就是最新版本。

所以我认为我当前版本的

gcc
clang
g++
可能已经足够新了,因为该安装页面上次更新是在 2020 年。

这些是我的版本:

  • gcc -v
    :gcc版本11.4.0(Ubuntu 11.4.0-1ubuntu1~22.04)
  • g++ -v
    :显然是
    gcc
  • 的同义词
  • clang -v
    :Ubuntu clang 版本 14.0.0-1ubuntu1.1

所以我的问题是:上述错误是否是由于使用不理解这些行的不适当的编译器而引入的?

因此,我认为这是一个c++问题,因为有些人可能知道这种错误。

c++ compiler-errors compilation scons mapnik
1个回答
0
投票

我通过使用

C++17
标准而不是默认的
C++14
标准进行编译,成功地完全避免了错误。

如何在配置过程中设置此标志:

./configure CXX_STD="17"

请参阅 Mapnik Repo 上的第 4405 期问题查看整个斗争过程。不幸的是,为了获得功能完整的构建,需要额外的补丁。

© www.soinside.com 2019 - 2024. All rights reserved.