【问题标题】:error: ‘IOV_MAX’ undeclared (first use in this function)错误:“IOV_MAX”未声明(在此函数中首次使用)
【发布时间】:2012-01-26 22:28:06
【问题描述】:

我正在尝试安装memcached-1.2.8-repcached-2.2.1

运行make后出现如下错误:

$ make  all-recursive 
make[1]: Entering directory `/usr/local/src/pro/memcached-1.2.8-repcached-2.2.1'     
Making all in doc
make[2]: Entering directory `/usr/local/src/pro/memcached-1.2.8-repcached-2.2.1/doc'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/usr/local/src/pro/memcached-1.2.8-repcached-2.2.1/doc'
make[2]: Entering directory `/usr/local/src/pro/memcached-1.2.8-repcached-2.2.1'
gcc -DHAVE_CONFIG_H -I.  -DNDEBUG   -g -O2 -MT memcached-memcached.o -MD -MP -MF 
.d eps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f 'memcached.c' || echo './'`memcached.c
memcached.c: In function ‘add_iov’:
memcached.c:697: error: ‘IOV_MAX’ undeclared (first use in this function)
memcached.c:697: error: (Each undeclared identifier is reported only once
memcached.c:697: error: for each function it appears in.)
make[2]: *** [memcached-memcached.o] Error 1     
make[2]: Leaving directory `/usr/local/src/pro/memcached-1.2.8-repcached-2.2.1'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/pro/memcached-1.2.8-repcached-2.2.1'
make: *** [all] Error 2

操作系统:Centos5.7 64位

gcc-4.1.2-51.el5

gcc-c++-4.1.2-51.el5

libgcc-4.1.2-51.el5

gcc 中的 IOV_MAX 有什么问题吗?文件头...等?

【问题讨论】:

  • 错了吗?我不知道,但它似乎没有在您的环境中按原样定义。
  • @CarlNorum 是否需要在特定的头文件中声明。? , 如果是,请您提供文件名或链接以将此文件下载到 /usr/include
  • #include limits.h 应该加入IOV_MAX
  • @DavidSchwartz /usr/include/limits.h 不包含任何 IOV grep IOV /usr/include/limits.h 没有 grep 任何东西。
  • @RamyAllam 您不能使用grep 来判断头文件的作用,因为头文件包含其他头文件。

标签: c++ c gcc


【解决方案1】:

你应该

yum 删除 libevent2-devel

yum install libevent libevent-devel

【讨论】:

    【解决方案2】:

    这表明包含文件或包含路径或环境存在缺陷。

    应该如何定义它很简单:

    memcached.c 第 33 行应定义 __need_IOV_MAX
    memcached.c 第 42 行包含 stdio.h
    stdio.h(无论如何在我的系统上)第 161 行包含 bits/stdio_lim.h
    stdio_lim.h 的最后几行(第 42-43 行)应该定义它:

    #if defined __need_IOV_MAX && !defined IOV_MAX
    # define IOV_MAX 1024
    #endif
    

    我尝试构建 memcached,但它依赖于 libevent 的方式有些混乱。这是 Fedora 15 上 configure 的最后几行代码:

    ...
    checking for a BSD-compatible install... /usr/bin/install -c
    checking for libevent directory... configure: error: libevent is required.
    You can get it from http://www.monkey.org/~provos/libevent/
    
          If it's already installed, specify its path using --with-libevent=/dir/
    
    [wally@lenovotower memcached-1.2.8-repcached-2.2.1]$ rpm -q libevent
    libevent-2.0.10-2.fc15.i686
    [wally@lenovotower memcached-1.2.8-repcached-2.2.1]$ 
    

    但是/usr/... 中的任何地方都没有event.h

    【讨论】:

      【解决方案3】:

      如果你在 Ubuntu 12.10(可能还有其他版本)上编译也有同样的情况,你需要安装 libevent1-dev 包。

      【讨论】:

        猜你喜欢
        • 2016-05-09
        • 2018-10-03
        • 1970-01-01
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多