无法在OpenBSD上使用Editline进行编译

尼古拉斯·R。

我认为必须安装editline(libedit?)库,但是在哪里可以获取OpenBSD?使用PC-BSD可以很好地编译代码,但是使用OpenBSD可以得到此错误

implicit declaration of rl_bind_key

找不到的是editline库。我尝试使用Google搜索来查找在哪里可以找到OpenBSD,但是找不到它。你能帮助我吗?我使用的标题是

#define _XOPEN_SOURCE 500

#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include "openshell.h"
#include "errors.h"
#include <errno.h>
#include <locale.h>
#include <editline/readline.h>

生成文件

CC = gcc
GIT_VERSION := $(shell git describe --abbrev=4 --dirty --always --tags)
CFLAGS := $(CFLAGS) -pedantic -std=c99 -Wall -O3 -ledit -g -DVERSION=\"$(GIT_VERSION)\"

shell: main.o
    $(CC) -o shell main.o errors.c util.c pipeline.c -ledit

main.o: main.c errors.c util.c

.PHONY: clean
clean:
    rm -f *.o

这是令人反感的代码

int exec_program(const char *name) {
    FILE *fp;
    int r = 0;
    char *input, shell_prompt[100];
    if (sourceCount >= MAX_SOURCE) {
        fprintf(stderr, "Too many source files\n");
        return 1;
    }
    fp = stdin;
    if (name) {
        fp = fopen(name, "r");

        if (fp == NULL) {
            perror(name);

            return 1;
        }
    }
    sourcefiles[sourceCount++] = fp;
    setlocale(LC_CTYPE, "");
    /*Configure readline to auto-complete paths when the tab key is hit.*/
    rl_bind_key('\t', rl_complete);
    stifle_history(7);
    for (; ;) {
        /* Create prompt string from user name and current working directory.*/
        snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));
        // Display prompt and read input (NB: input must be freed after use)...
        input = readline(shell_prompt);
        // Check for EOF.
        if (!input)
            break;
        add_history(input);
        r = command(input);
        free(input);
    }
    return r;
}

如果我运行,locate editline它将找到并更改Makefile并收到一个新错误undefined reference to tgetnum,根据google的说法,该错误必须与该ncurses链接现在可以编译了。新的Makefile是:

CC = gcc
GIT_VERSION := $(shell git describe --abbrev=4 --dirty --always --tags)
CFLAGS := $(CFLAGS) -L/usr/local/include/ -L/usr/include -pedantic -std=c99 -Wall -O3 -g -DVERSION=\"$(GIT_VERSION)\" -ledit -lncurses

LDIRS = -L/usr/local/lib -L/usr/lib
LIBS = -ledit lncurses -lcurses

shell: main.o
    $(CC) -o shell main.o errors.c util.c pipeline.c -ledit -lncurses -lcurses

main.o: main.c errors.c util.c

.PHONY: clean
clean:
    rm -f *.o
罗兰·史密斯

检查editline/readline.h可以在哪里找到(例如,使用locate)。

如果位于中/usr/local/include,则可能应将其添加到CFLAGSMakefile中;否则,请执行以下操作。

CFLAGS := $(CFLAGS) -I/usr/local/include -pedantic -std=c99 -Wall -O3 -g -DVERSION=\"$(GIT_VERSION)\"
LDIRS = -L/usr/local/lib
LIBS = -ledit

SRCS= main.c errors.c util.c pipeline.c
OBJS= $(SRCS:.c=.o)

shell: $(OBJS)
    $(CC) $(LDIRS) -o shell $(OBJS) $(LIBS)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在OpenBSD上编译bitcoind

来自分类Dev

ImageMagick无法在Ubuntu上使用PNG支持进行编译

来自分类Dev

无法在Ubuntu 12.04上使用GCC进行编译

来自分类Dev

无法在Ubuntu 12.04上使用GCC进行编译

来自分类Dev

无法使用Picocli进行编译

来自分类Dev

无法使用openmp进行编译

来自分类Dev

mysql C ++将无法使用make进行编译,但是如果将g ++参数放在cmd行上,它将进行编译

来自分类Dev

mysql C ++将无法使用make进行编译,但如果将g ++参数放在cmd行上,则将进行编译

来自分类Dev

Maven项目无法在OSX上使用Java 8进行编译

来自分类Dev

g ++无法在Windows上使用通配符文件名进行编译

来自分类Dev

Tensorflow 2无法在Windows 10上使用bazel进行编译-包名称错误

来自分类Dev

Maven项目无法在OSX上使用Java 8进行编译

来自分类Dev

使用node-gyp进行编译时,CFLAGS无法在Windows上运行

来自分类Dev

g ++无法在Windows上使用通配符文件名进行编译

来自分类Dev

std :: bind无法在MSVC上使用std :: atomic_bool&进行编译

来自分类Dev

std :: find()无法使用gcc进行编译

来自分类Dev

Gradle无法使用lib进行编译

来自分类Dev

Gradle无法使用Java 1.8进行编译

来自分类Dev

无法使用gcc-7进行编译

来自分类Dev

使用Codelite进行编译。无法识别“制造”

来自分类Dev

模板无法使用dev c ++进行编译

来自分类Dev

Browserify无法使用日期行进行编译

来自分类Dev

Freetype无法使用MinGW在Windows上编译

来自分类Dev

glog无法在Windows上使用MinGW编译

来自分类Dev

在 IAudioSessionControl 上使用 QueryInterface for ISimpleAudioVolume 无法编译

来自分类Dev

使用SSL的httpd无法在OpenBSD 5.9(amd64)上启动

来自分类Dev

在macOS上使用OpenMP使用Cython进行编译

来自分类Dev

在Raspbian上的C ++上使用线程,无法编译

来自分类Dev

在Raspbian上的C ++上使用线程,无法编译

Related 相关文章

  1. 1

    在OpenBSD上编译bitcoind

  2. 2

    ImageMagick无法在Ubuntu上使用PNG支持进行编译

  3. 3

    无法在Ubuntu 12.04上使用GCC进行编译

  4. 4

    无法在Ubuntu 12.04上使用GCC进行编译

  5. 5

    无法使用Picocli进行编译

  6. 6

    无法使用openmp进行编译

  7. 7

    mysql C ++将无法使用make进行编译,但是如果将g ++参数放在cmd行上,它将进行编译

  8. 8

    mysql C ++将无法使用make进行编译,但如果将g ++参数放在cmd行上,则将进行编译

  9. 9

    Maven项目无法在OSX上使用Java 8进行编译

  10. 10

    g ++无法在Windows上使用通配符文件名进行编译

  11. 11

    Tensorflow 2无法在Windows 10上使用bazel进行编译-包名称错误

  12. 12

    Maven项目无法在OSX上使用Java 8进行编译

  13. 13

    使用node-gyp进行编译时,CFLAGS无法在Windows上运行

  14. 14

    g ++无法在Windows上使用通配符文件名进行编译

  15. 15

    std :: bind无法在MSVC上使用std :: atomic_bool&进行编译

  16. 16

    std :: find()无法使用gcc进行编译

  17. 17

    Gradle无法使用lib进行编译

  18. 18

    Gradle无法使用Java 1.8进行编译

  19. 19

    无法使用gcc-7进行编译

  20. 20

    使用Codelite进行编译。无法识别“制造”

  21. 21

    模板无法使用dev c ++进行编译

  22. 22

    Browserify无法使用日期行进行编译

  23. 23

    Freetype无法使用MinGW在Windows上编译

  24. 24

    glog无法在Windows上使用MinGW编译

  25. 25

    在 IAudioSessionControl 上使用 QueryInterface for ISimpleAudioVolume 无法编译

  26. 26

    使用SSL的httpd无法在OpenBSD 5.9(amd64)上启动

  27. 27

    在macOS上使用OpenMP使用Cython进行编译

  28. 28

    在Raspbian上的C ++上使用线程,无法编译

  29. 29

    在Raspbian上的C ++上使用线程,无法编译

热门标签

归档