在Linux上使用ncurses时未定义的引用

我试图开始在Linux上使用ncurses开发一个程序。 我甚至无法得到Hello World示例来编译。 代码如下:

#include <curses.h> int main() { initscr(); printw("Hello, world."); refresh(); getch(); endwin(); return 0; } 

当我试图编译时,我得到:

 hello.c:(.text+0x12): undefined reference to `initscr' 

对于所谓的function中的每一个。

我通过apt-get安装了ncurses,还通过下载源代码和编译,安装等

我已经尝试#include curses.hncurses.h

到底是怎么回事?

链接时是否使用了-lcurses选项?

包含头文件让代码编译(因为编译器知道函数调用看起来像.h文件),但是链接器需要库文件来找到实际的代码链接到你的程序。

正如Greg Hewgill所说,你需要传递-lcurses-lncurses来链接到curses库。

 gcc -o hello hello.c -lncurses 

你也可能意味着使用initscr()getch() 。 一旦我做出这些替换,上面为我编译。

对于任何有类似问题的人:-lx参数,其中x是你的库,应该总是遵循源文件和目标文件。

我有一个类似的问题,并找到了一个解决方案,帮助我,但稍有不同,从这里发布的其他答案。 我试图用curses使用面板库,我的编译命令是:

 $ gcc -o hello hello.c -lncurses -lpanel 

当我读到其他答案时,我很困惑,因为我包含了-lncurses标志,但它仍然没有编译,并且与你所得到的类似的错误:

 $ gcc -o hello hello.c -lncurses -lpanel /usr/lib/gcc/i686-linux-gnu/4.7/../../../../lib/libpanel.a(p_new.o): In function `new_panel': p_new.c:(.text+0x18): undefined reference to `_nc_panelhook' 

我终于在tldp找到了我的答案:

“要使用面板库函数,必须包含panel.h,并将面板程序与面板库链接起来,标志-lpanel应该与-lncurses一起添加。”

所以,使用编译标志看起来顺序是重要的! 我试过切换顺序:

 gcc -o hello hello.c -lpanel -lncurses 

这使得它能够成功编译。 我知道你已经有了答案,所以我希望这可以帮助别人。