문제

Linux에서 NCURSE를 사용하여 프로그램 개발을 시작하려고합니다. 나는 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.h 그리고 ncurses.h.

무슨 일이 일어나고 있습니까?

도움이 되었습니까?

해결책

당신은 사용 했습니까? -lcurses 링크 할 때 옵션?

헤더 파일을 포함하여 코드 컴파일을 허용합니다 (컴파일러가 함수 호출이 어떻게 보이는지 알기 때문에 .h 파일), 그러나 링커에는 프로그램에 링크 할 실제 코드를 찾으려면 라이브러리 파일이 필요합니다.

다른 팁

Greg Hewgill이 말했듯이 -lcurses 또는 -lncurses Curses 라이브러리에 링크합니다.

gcc -o hello hello.c -lncurses

당신은 아마도 사용하는 것을 의미합니다 initscr() 그리고 getch(). 내가 그러한 대체를하면 위의 것은 나를 위해 컴파일합니다.

비슷한 문제가있는 사람의 경우 : x가 라이브러리 인 -lx 인수는 항상 소스와 객체 파일을 따라야합니다.

나는 비슷한 문제를 겪고 있었고 저를 도와주는 해결책을 찾았지만 여기에 게시 된 다른 답변과 약간 다릅니다. 저주와 함께 패널 라이브러리를 사용하려고했는데 컴파일 명령은 다음과 같습니다.

$ 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:

"패널 라이브러리 기능을 사용하려면 패널을 포함시켜야하고 프로그램을 패널 라이브러리와 연결하려면 플래그 -lpanel을 해당 순서대로 -lncurses와 함께 추가해야합니다."

따라서 컴파일 플래그를 사용할 때 순서가 중요합니다! 순서를 전환하려고 시도했습니다.

gcc -o hello hello.c -lpanel -lncurses

이를 통해 성공적으로 컴파일 할 수있었습니다. 나는 당신이 이미 당신의 대답을 가지고 있다는 것을 알고 있습니다. 그래서 이것이 누군가를 돕기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top