在Linux环境中运行的OSX终端上编译代码的难度

时间:2015-09-18 20:14:06

标签: c linux macos terminal

我正在使用一些工作代码(我没有写,创建者不在身边)尝试使用终端在我的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,那就相同了,但显然有一些我不理解的细微之处。

提前致谢。

1 个答案:

答案 0 :(得分:3)

你是否为编译器提供了正确的标志?好像你没有链接到libedit。尝试将-ledit传递给编译器并告诉我们是否有帮助。

#include <libedit.dylib>

这永远不正确。你不能#include一个库,你需要告诉编译器你想在调用时链接这个库。