未定义的引用`PDC_ungetch'而其他功能在PDcurses中有效

时间:2016-02-11 18:52:23

标签: c cmake ncurses undefined-reference pdcurses

我有一个奇怪的问题,我得到undefined reference to "PDC_ungetch",而我可以毫无问题地使用curses.h中的其他函数,例如:

#include <curses.h>

int main(){
    initscr();
    int ch = getch();
    ungetch(ch);
    return 0;
}

使用此代码我只会获得undefined reference to "PDC_ungetch"initscr()无问题,会出现什么问题?

我的CMake如下:

cmake_minimum_required(VERSION 3.3)
project(rogue)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror")

set(SOURCE_FILES main.c gamelib.c gamelib.h maze.c maze.h) //these are other files I use

find_package(Curses REQUIRED)
include_directories(${CURSES_INCLUDE_DIR})

add_executable(rogue ${SOURCE_FILES} gamelib.c gamelib.h maze.c maze.h) //Same here

target_link_libraries(rogue ${CURSES_LIBRARIES})

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果你查看来自PDCurses的头文件<curses.h>,那个特定的函数是唯一一个以这种方式处理的函数:定义一个宏来使用带有PDC_前缀的函数。

如果碰巧是交叉编译(例如来自Cygwin),并且如果没有正确设置/使用cmake宏,他们可以找到系统curses库,它不使用该命名约定。在这种情况下,尝试链接时只会出现一个错误。