我试图开始在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.h
和ncurses.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
这使得它能够成功编译。 我知道你已经有了答案,所以我希望这可以帮助别人。