【问题标题】:Autoconf rejected by C++11 library accepted by compiler, reject by preprocessorAutoconf 被编译器接受的 C++11 库拒绝,被预处理器拒绝
【发布时间】:2016-10-28 17:20:47
【问题描述】:

我正在尝试将 rapidcheck 集成到现有的 C++ 代码库中。自述文件说它需要 C++11 并且严重依赖其功能。现有代码库使用 automake 构建所有依赖项。这是我如何将依赖项添加到configure.ac

  CXXFLAGS="$CXXFLAGS -Wall -Werror -Wno-missing-braces -std=c++11"
  CXXFLAGS="$CXXFLAGS -I/home/chris/dev/rapidcheck/include"
  CXXFLAGS="$CXXFLAGS -I/home/chris/dev/rapidcheck/include/rapidcheck"
  AC_CHECK_HEADERS(
      [rapidcheck.h],
      [AC_CHECK_LIB([rapidcheck], [main],[], [])],
      [])

这是我在运行配置脚本时遇到的错误:

checking rapidcheck.h usability... yes
checking rapidcheck.h presence... no
configure: WARNING: rapidcheck.h: accepted by the compiler, rejected by the preprocessor!
configure: WARNING: rapidcheck.h: proceeding with the compiler's result
checking for rapidcheck.h... yes
checking for main in -lrapidcheck... no

config.log的内容

3501 configure:22873: checking rapidcheck.h usability
3502 configure:22873: g++ -std=c++11 -c -g -O2 -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wall -Werror -Wno-missing-braces -std=c++11 -I/home/chris/dev/rapidcheck/include -I/home/chris     /dev/rapidcheck/include/rapidcheck  -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS conftest.cpp >&5
3503 configure:22873: $? = 0
3504 configure:22873: result: yes
3505 configure:22873: checking rapidcheck.h presence
3506 configure:22873: g++ -std=c++11 -E  -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS conftest.cpp
3507 conftest.cpp:58:24: fatal error: rapidcheck.h: No such file or directory
3508 compilation terminated.

我认为这与没有最新的 C++ 编译器有关。

这是我安装的 C++ 版本:

chris@chris:~/dev/bitcoin$ g++ --version
g++ (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我认为 与 C++11 兼容。

【问题讨论】:

  • gcc 4.9 确实有合理但不完整的 C++11 支持。
  • 所以我需要升级到另一个版本?我应该升级到的最低版本是多少?
  • 我会说 5.3。 gcc的当前版本是6.1
  • 预处理器标志(如-I)应设置为CPPFLAGS 而不是CXXFLAGS
  • @SamVarshavchik 我更新到 5.3,但我仍然有同样的错误。 @Galik 如果我改用 CPPFLAGS automake 根本找不到 rapidcheck.h

标签: c++ c++11 autoconf


【解决方案1】:

这与automake无关,与autoconf有关。

特别是,您通常应该能够忽略此警告,因为 autoconf 比预处理器更能接受编译器输出。正如有人在 cmets 中已经说过的,CPPFLAGS 应该用于传递 -I 标志,以便预处理器找到标头,但在这种情况下,它真的没那么重要,因为这些标志不应该在 configure.ac 中设置完全没有(而是从外部传递,因为安装位置是由用户定义的。)

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2020-07-19
    • 2012-03-21
    • 2018-08-20
    相关资源
    最近更新 更多