我正在尝试在Linux上使用ncurses开始开发程序.我甚至无法编译Hello World示例.这是代码:
#include <curses.h>
int main()
{
initscr();
printw("Hello, world.");
refresh();
getch();
endwin();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我得到:
hello.c:(.text+0x12): undefined reference to `initscr'
Run Code Online (Sandbox Code Playgroud)
对于那些被称为函数的每一个.
我通过apt-get安装了ncurses,还通过下载源代码并编译,安装等.
我已经试过#include这两个curses.h和ncurses.h.
到底是怎么回事?
Bri*_*ell 12
正如Greg Hewgill所说,你需要传入-lcurses或-lncurses链接到curses库.
gcc -o hello hello.c -lncurses
Run Code Online (Sandbox Code Playgroud)
你也可能意味着使用initscr()和getch().一旦我进行了这些替换,上面的编译对我来说.
我遇到了类似的问题,并找到了一个对我有帮助的解决方案,但与此处发布的其他答案略有不同。我试图使用带有诅咒的面板库,我的编译命令是:
$ gcc -o hello hello.c -lncurses -lpanel
Run Code Online (Sandbox Code Playgroud)
当我看到其他的答案,我感到莫名其妙,因为我是包括-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'
Run Code Online (Sandbox Code Playgroud)
我终于在tldp 中找到了答案:
“要使用面板库函数,您必须包含 panel.h 并将程序与面板库链接,标志 -lpanel 应该与 -lncurses 一起添加。”
因此,在使用编译标志时,顺序似乎很重要!我尝试切换顺序:
gcc -o hello hello.c -lpanel -lncurses
Run Code Online (Sandbox Code Playgroud)
这使它能够成功编译。我知道你已经有了答案,所以我希望这对某人有所帮助。