我正在使用一些工作代码(我没有写,创建者不在身边)尝试使用终端在我的Mac(10.9.5)上编译。编译(gcc -o code code.c
)时出现以下错误:
Undefined symbols for architecture x86_64:
"_add_history", referenced from:
_rl_gets in talk-c856c6.o
"_read_history", referenced from:
_main in talk-c856c6.o
"_readline", referenced from:
_rl_gets in talk-c856c6.o
"_write_history", referenced from:
_rl_gets in talk-c856c6.o
ld: symbol(s) not found for architecture x86_64
以下是我的所有内容:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <strings.h>
#include <readline/readline.h>
#include <readline/history.h>
我在这里和其他地方发现类似的问题,并尝试过
#include <readline.h>
但获得fatal error: 'readline.h' file not found
(#include <libedit.dylib>
)
我对外部库有点新手所以也许我需要再安装一个?我的问题是,mac需要安装一个额外的库才能使用这5个函数创建错误,或者我的#includes只用于Linux而不是Mac?我想,既然Mac和Linux都在使用Unix,那就相同了,但显然有一些我不理解的细微之处。
提前致谢。
答案 0 :(得分:3)
你是否为编译器提供了正确的标志?好像你没有链接到libedit
。尝试将-ledit
传递给编译器并告诉我们是否有帮助。
#include <libedit.dylib>
这永远不正确。你不能#include
一个库,你需要告诉编译器你想在调用时链接这个库。