代码之家  ›  专栏  ›  技术社区  ›  Niklas Rosencrantz

OpenBSD 6.1终端。h: 没有这样的文件或目录

  •  0
  • Niklas Rosencrantz  · 技术社区  · 7 年前

    我试图用OpenBSD 6.1构建代码,但收到了这个错误消息。

    sh.h:98:20: error: termio.h: No such file or directory
    In file included from edit.c:1:
    sh.h:235: error: conflicting types for 'rlim_t'
    /usr/include/sys/types.h:145: error: previous declaration of 'rlim_t' was here
    In file included from edit.c:1:
    sh.h:2291: warning: 'struct termio' declared inside parameter list
    sh.h:2291: warning: its scope is only this definition or declaration, which is probably not what you want
    edit.c: In function 'x_mode':
    edit.c:3256: error: invalid use of undefined type 'struct termio'
    edit.c:3256: error: 'VERASE' undeclared (first use in this function)
    edit.c:3256: error: (Each undeclared identifier is reported only once
    edit.c:3256: error: for each function it appears in.)
    edit.c:3256: error: invalid use of undefined type 'struct termio'
    edit.c:3257: error: invalid use of undefined type 'struct termio'
    edit.c:3257: error: 'VKILL' undeclared (first use in this function)
    edit.c:3257: error: invalid use of undefined type 'struct termio'
    edit.c:3258: error: invalid use of undefined type 'struct termio'
    edit.c:3258: error: 'VINTR' undeclared (first use in this function)
    edit.c:3258: error: invalid use of undefined type 'struct termio'
    edit.c:3259: error: invalid use of undefined type 'struct termio'
    edit.c:3259: error: 'VQUIT' undeclared (first use in this function)
    edit.c:3259: error: invalid use of undefined type 'struct termio'
    edit.c:3260: error: invalid use of undefined type 'struct termio'
    edit.c:3260: error: 'VEOF' undeclared (first use in this function)
    edit.c:3260: error: invalid use of undefined type 'struct termio'
    edit.c:3293: error: 'TCSETAW' undeclared (first use in this function)
    *** Error 1 in src (Makefile:774 'edit.o')
    *** Error 1 in . (Makefile:834 'all-recursive')
    *** Error 1 in /root/opsh (Makefile:750 'all')
    # pkg_add termios
    quirks-2.304 signed on 2017-04-02T15:01:33Z
    Can't find termios
    # pkg_add termios 
    # termios
    ksh: termios: not found
    # termio
    ksh: termio: not found
    # pkg_add libc6-dev
    quirks-2.304 signed on 2017-04-02T15:01:33Z
    Can't find libc6-dev
    # pkg_add libc6     
    quirks-2.304 signed on 2017-04-02T15:01:33Z
    Can't find libc6
    # 
    

    我能做些什么?代码用Ubuntu 1604编译。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jonathan Leffler    7 年前

    这个 <termio.h> 标头不是标准的,即使它在Linux上可用。标准标题是POSIX <termios.h>

    /* Compatible <termio.h> for old `struct termio' ioctl interface.
       This is obsolete; use the POSIX.1 `struct termios' interface
       defined in <termios.h> instead.  */
    
    #include <termios.h>
    #include <sys/ioctl.h>
    

    如果使用非标准标头,则在其他系统上可能找不到。你可以自己创建一份 <termio.h> 使用上述信息。幸运的是,你会发现BSD <sys/ioctl.h> (它确实存在)包含您需要的信息(如果有),但它不是POSIX标准化的标题,因此所有下注都是无效的 <术语h>