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

时间:2009-04-30 04:32:05

标签: c 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'

对于每一个被称为函数的人。

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

我已尝试#include curses.hncurses.h

发生了什么事?

4 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:12)

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

gcc -o hello hello.c -lncurses

您也可能想要使用initscr()getch()。一旦我进行了这些替换,上面的内容就会为我编译。

答案 2 :(得分:4)

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

答案 3 :(得分:3)

我遇到了类似的问题并找到了一个帮助我的解决方案,但与此处发布的其他答案略有不同。我试图使用带有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'

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

  

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

因此,使用编译标志时,顺序似乎很重要!我尝试切换订单:

gcc -o hello hello.c -lpanel -lncurses

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